'tsab-'.uniqid('', true).'@example.com', 'password' => bcrypt('secret'), 'lang' => 'de', ]); } /** * @param array $overrides */ function tsabMakeAbo(array $overrides = []): UserAbo { return UserAbo::create(array_merge([ 'user_id' => 0, 'member_id' => null, 'shopping_user_id' => 0, 'email' => 'tsab-abo-'.uniqid('', true).'@example.com', 'is_for' => 'me', 'payone_userid' => 0, 'clearingtype' => 'cc', 'active' => true, 'status' => 2, 'abo_interval' => 5, 'next_date' => now()->addDays(3), ], $overrides)); } it('renders own-abo and customer-abo badges for a team partner', function () { $partner = tsabMakeUser(); tsabMakeAbo(['user_id' => $partner->id, 'is_for' => 'me']); tsabMakeAbo(['user_id' => $partner->id, 'is_for' => 'ot', 'member_id' => $partner->id]); tsabMakeAbo(['user_id' => $partner->id, 'is_for' => 'ot', 'member_id' => $partner->id]); $renderer = new TreeHtmlRenderer('member'); $renderer->loadAboBadges([$partner->id]); $html = $renderer->renderAboBadges($partner->id); expect($html)->toContain('badge badge-success') ->toContain('>A') ->toContain(e(__('team.badge_own_abo'))) ->toContain('badge badge-danger') ->toContain('>(2)') ->toContain(e(trans_choice('team.badge_customer_abos', 2))); }); it('renders no badges for a team partner without active abos', function () { $partner = tsabMakeUser(); $renderer = new TreeHtmlRenderer('member'); $renderer->loadAboBadges([$partner->id]); expect($renderer->renderAboBadges($partner->id))->toBe(''); }); it('does not count soft-deleted, inactive or terminated abos', function () { $partner = tsabMakeUser(); tsabMakeAbo(['user_id' => $partner->id, 'is_for' => 'me'])->delete(); tsabMakeAbo(['user_id' => $partner->id, 'is_for' => 'ot', 'member_id' => $partner->id])->delete(); tsabMakeAbo(['user_id' => $partner->id, 'is_for' => 'ot', 'member_id' => $partner->id, 'active' => false]); tsabMakeAbo(['user_id' => $partner->id, 'is_for' => 'ot', 'member_id' => $partner->id, 'status' => 4]); tsabMakeAbo(['user_id' => $partner->id, 'is_for' => 'ot', 'member_id' => $partner->id, 'status' => 5]); tsabMakeAbo(['user_id' => $partner->id, 'is_for' => 'ot', 'member_id' => $partner->id, 'status' => 6]); $renderer = new TreeHtmlRenderer('member'); $renderer->loadAboBadges([$partner->id]); expect($renderer->renderAboBadges($partner->id))->toBe(''); }); it('shows only the customer badge when the partner has customer abos but no own abo', function () { $partner = tsabMakeUser(); tsabMakeAbo(['user_id' => $partner->id, 'is_for' => 'ot', 'member_id' => $partner->id]); $renderer = new TreeHtmlRenderer('member'); $renderer->loadAboBadges([$partner->id]); $html = $renderer->renderAboBadges($partner->id); expect($html)->not->toContain('badge badge-success') ->toContain('badge badge-danger') ->toContain('>(1)') ->toContain(e(trans_choice('team.badge_customer_abos', 1))); }); it('does not attribute abos of other users to the team partner', function () { $partner = tsabMakeUser(); $other = tsabMakeUser(); tsabMakeAbo(['user_id' => $other->id, 'is_for' => 'me']); tsabMakeAbo(['user_id' => $other->id, 'is_for' => 'ot', 'member_id' => $other->id]); $renderer = new TreeHtmlRenderer('member'); $renderer->loadAboBadges([$partner->id, $other->id]); expect($renderer->renderAboBadges($partner->id))->toBe('') ->and($renderer->renderAboBadges($other->id))->toContain('>A') ->and($renderer->renderAboBadges($other->id))->toContain('>(1)'); });