|
11 | 11 |
|
12 | 12 | class SubscribableTest extends TestCase |
13 | 13 | { |
14 | | - public function testSubscriptions(): void |
| 14 | + public function modelClasses(): array |
| 15 | + { |
| 16 | + return[ |
| 17 | + [Channel::class], |
| 18 | + [User::class], |
| 19 | + ]; |
| 20 | + } |
| 21 | + |
| 22 | + /** |
| 23 | + * @dataProvider modelClasses |
| 24 | + * |
| 25 | + * @param \LaravelInteraction\Subscribe\Tests\Models\User|\LaravelInteraction\Subscribe\Tests\Models\Channel|string $modelClass |
| 26 | + */ |
| 27 | + public function testSubscriptions(string $modelClass): void |
15 | 28 | { |
16 | 29 | $user = User::query()->create(); |
17 | | - $channel = Channel::query()->create(); |
18 | | - $user->subscribe($channel); |
19 | | - self::assertSame(1, $channel->subscriptions()->count()); |
20 | | - self::assertSame(1, $channel->subscriptions->count()); |
| 30 | + $model = $modelClass::query()->create(); |
| 31 | + $user->subscribe($model); |
| 32 | + self::assertSame(1, $model->subscribableSubscriptions()->count()); |
| 33 | + self::assertSame(1, $model->subscribableSubscriptions->count()); |
21 | 34 | } |
22 | 35 |
|
23 | | - public function testSubscribersCount(): void |
| 36 | + /** |
| 37 | + * @dataProvider modelClasses |
| 38 | + * |
| 39 | + * @param \LaravelInteraction\Subscribe\Tests\Models\User|\LaravelInteraction\Subscribe\Tests\Models\Channel|string $modelClass |
| 40 | + */ |
| 41 | + public function testSubscribersCount(string $modelClass): void |
24 | 42 | { |
25 | 43 | $user = User::query()->create(); |
26 | | - $channel = Channel::query()->create(); |
27 | | - $user->subscribe($channel); |
28 | | - self::assertSame(1, $channel->subscribersCount()); |
29 | | - $user->unsubscribe($channel); |
30 | | - self::assertSame(1, $channel->subscribersCount()); |
31 | | - $channel->loadCount('subscribers'); |
32 | | - self::assertSame(0, $channel->subscribersCount()); |
| 44 | + $model = $modelClass::query()->create(); |
| 45 | + $user->subscribe($model); |
| 46 | + self::assertSame(1, $model->subscribersCount()); |
| 47 | + $user->unsubscribe($model); |
| 48 | + self::assertSame(1, $model->subscribersCount()); |
| 49 | + $model->loadCount('subscribers'); |
| 50 | + self::assertSame(0, $model->subscribersCount()); |
33 | 51 | } |
34 | 52 |
|
35 | 53 | public function data(): array |
@@ -67,61 +85,86 @@ public function testSubscribersCountForHumans($actual, $onePrecision, $twoPrecis |
67 | 85 | self::assertSame($halfDown, $channel->subscribersCountForHumans(2, PHP_ROUND_HALF_DOWN)); |
68 | 86 | } |
69 | 87 |
|
70 | | - public function testIsSubscribedBy(): void |
| 88 | + /** |
| 89 | + * @dataProvider modelClasses |
| 90 | + * |
| 91 | + * @param \LaravelInteraction\Subscribe\Tests\Models\User|\LaravelInteraction\Subscribe\Tests\Models\Channel|string $modelClass |
| 92 | + */ |
| 93 | + public function testIsSubscribedBy(string $modelClass): void |
71 | 94 | { |
72 | 95 | $user = User::query()->create(); |
73 | | - $channel = Channel::query()->create(); |
74 | | - self::assertFalse($channel->isSubscribedBy($channel)); |
75 | | - $user->subscribe($channel); |
76 | | - self::assertTrue($channel->isSubscribedBy($user)); |
77 | | - $channel->load('subscribers'); |
78 | | - $user->unsubscribe($channel); |
79 | | - self::assertTrue($channel->isSubscribedBy($user)); |
80 | | - $channel->load('subscribers'); |
81 | | - self::assertFalse($channel->isSubscribedBy($user)); |
| 96 | + $model = $modelClass::query()->create(); |
| 97 | + self::assertFalse($model->isSubscribedBy($model)); |
| 98 | + $user->subscribe($model); |
| 99 | + self::assertTrue($model->isSubscribedBy($user)); |
| 100 | + $model->load('subscribers'); |
| 101 | + $user->unsubscribe($model); |
| 102 | + self::assertTrue($model->isSubscribedBy($user)); |
| 103 | + $model->load('subscribers'); |
| 104 | + self::assertFalse($model->isSubscribedBy($user)); |
82 | 105 | } |
83 | 106 |
|
84 | | - public function testIsNotSubscribedBy(): void |
| 107 | + /** |
| 108 | + * @dataProvider modelClasses |
| 109 | + * |
| 110 | + * @param \LaravelInteraction\Subscribe\Tests\Models\User|\LaravelInteraction\Subscribe\Tests\Models\Channel|string $modelClass |
| 111 | + */ |
| 112 | + public function testIsNotSubscribedBy(string $modelClass): void |
85 | 113 | { |
86 | 114 | $user = User::query()->create(); |
87 | | - $channel = Channel::query()->create(); |
88 | | - self::assertTrue($channel->isNotSubscribedBy($channel)); |
89 | | - $user->subscribe($channel); |
90 | | - self::assertFalse($channel->isNotSubscribedBy($user)); |
91 | | - $channel->load('subscribers'); |
92 | | - $user->unsubscribe($channel); |
93 | | - self::assertFalse($channel->isNotSubscribedBy($user)); |
94 | | - $channel->load('subscribers'); |
95 | | - self::assertTrue($channel->isNotSubscribedBy($user)); |
| 115 | + $model = $modelClass::query()->create(); |
| 116 | + self::assertTrue($model->isNotSubscribedBy($model)); |
| 117 | + $user->subscribe($model); |
| 118 | + self::assertFalse($model->isNotSubscribedBy($user)); |
| 119 | + $model->load('subscribers'); |
| 120 | + $user->unsubscribe($model); |
| 121 | + self::assertFalse($model->isNotSubscribedBy($user)); |
| 122 | + $model->load('subscribers'); |
| 123 | + self::assertTrue($model->isNotSubscribedBy($user)); |
96 | 124 | } |
97 | 125 |
|
98 | | - public function testSubscribers(): void |
| 126 | + /** |
| 127 | + * @dataProvider modelClasses |
| 128 | + * |
| 129 | + * @param \LaravelInteraction\Subscribe\Tests\Models\User|\LaravelInteraction\Subscribe\Tests\Models\Channel|string $modelClass |
| 130 | + */ |
| 131 | + public function testSubscribers(string $modelClass): void |
99 | 132 | { |
100 | 133 | $user = User::query()->create(); |
101 | | - $channel = Channel::query()->create(); |
102 | | - $user->subscribe($channel); |
103 | | - self::assertSame(1, $channel->subscribers()->count()); |
104 | | - $user->unsubscribe($channel); |
105 | | - self::assertSame(0, $channel->subscribers()->count()); |
| 134 | + $model = $modelClass::query()->create(); |
| 135 | + $user->subscribe($model); |
| 136 | + self::assertSame(1, $model->subscribers()->count()); |
| 137 | + $user->unsubscribe($model); |
| 138 | + self::assertSame(0, $model->subscribers()->count()); |
106 | 139 | } |
107 | 140 |
|
108 | | - public function testScopeWhereSubscribedBy(): void |
| 141 | + /** |
| 142 | + * @dataProvider modelClasses |
| 143 | + * |
| 144 | + * @param \LaravelInteraction\Subscribe\Tests\Models\User|\LaravelInteraction\Subscribe\Tests\Models\Channel|string $modelClass |
| 145 | + */ |
| 146 | + public function testScopeWhereSubscribedBy(string $modelClass): void |
109 | 147 | { |
110 | 148 | $user = User::query()->create(); |
111 | 149 | $other = User::query()->create(); |
112 | | - $channel = Channel::query()->create(); |
113 | | - $user->subscribe($channel); |
114 | | - self::assertSame(1, Channel::query()->whereSubscribedBy($user)->count()); |
115 | | - self::assertSame(0, Channel::query()->whereSubscribedBy($other)->count()); |
| 150 | + $model = $modelClass::query()->create(); |
| 151 | + $user->subscribe($model); |
| 152 | + self::assertSame(1, $modelClass::query()->whereSubscribedBy($user)->count()); |
| 153 | + self::assertSame(0, $modelClass::query()->whereSubscribedBy($other)->count()); |
116 | 154 | } |
117 | 155 |
|
118 | | - public function testScopeWhereNotSubscribedBy(): void |
| 156 | + /** |
| 157 | + * @dataProvider modelClasses |
| 158 | + * |
| 159 | + * @param \LaravelInteraction\Subscribe\Tests\Models\User|\LaravelInteraction\Subscribe\Tests\Models\Channel|string $modelClass |
| 160 | + */ |
| 161 | + public function testScopeWhereNotSubscribedBy($modelClass): void |
119 | 162 | { |
120 | 163 | $user = User::query()->create(); |
121 | 164 | $other = User::query()->create(); |
122 | | - $channel = Channel::query()->create(); |
123 | | - $user->subscribe($channel); |
124 | | - self::assertSame(0, Channel::query()->whereNotSubscribedBy($user)->count()); |
125 | | - self::assertSame(1, Channel::query()->whereNotSubscribedBy($other)->count()); |
| 165 | + $model = $modelClass::query()->create(); |
| 166 | + $user->subscribe($model); |
| 167 | + self::assertSame($modelClass::query()->whereKeyNot($model->getKey())->count(), $modelClass::query()->whereNotSubscribedBy($user)->count()); |
| 168 | + self::assertSame($modelClass::query()->count(), $modelClass::query()->whereNotSubscribedBy($other)->count()); |
126 | 169 | } |
127 | 170 | } |
0 commit comments