- protected function createMembershipFromFixture(string $fixture, string $status, $emailParams = []): CRM_Member_DAO_Membership {
- /* @var CRM_Member_DAO_Membership $membership */
- $membership = $this->createTestObject(
- 'CRM_Member_DAO_Membership',
- array_merge($this->fixtures[$fixture], ['status_id' => CRM_Core_PseudoConstant::getKey('CRM_Member_BAO_Membership', 'status_id', $status)])
- );
+ protected function createMembershipFromFixture(string $fixture, string $status, array $emailParams = [], array $membershipOverrides = []): array {
+ $membershipTypeID = $membershipOverrides['membership_type_id'] ?? $this->fixtures[$fixture]['membership_type_id'];
+ if (is_array($membershipTypeID)) {
+ $membershipTypeID = MembershipType::create()->setValues(array_merge([
+ 'member_of_contact_id' => 1,
+ 'financial_type_id:name' => 'Member Dues',
+ 'name' => 'fixture-created-type',
+ ], $this->fixtures[$fixture]['membership_type_id']))->execute()->first()['id'];
+ }
+ $params = array_merge($this->fixtures[$fixture], [
+ 'sequential' => 1,
+ 'status_id' => CRM_Core_PseudoConstant::getKey('CRM_Member_BAO_Membership', 'status_id', $status),
+ 'membership_type_id' => $membershipTypeID,
+ ], $membershipOverrides);
+ if (empty($params['contact_id'])) {
+ $params['contact_id'] = $this->individualCreate(['email' => '']);
+ }
+ $membership = (array) $this->callAPISuccess('Membership', 'create', $params)['values'][0];