7
7
use App \Models \License ;
8
8
use App \Models \User ;
9
9
use Illuminate \Foundation \Testing \RefreshDatabase ;
10
- use Illuminate \ Support \ Facades \ Session ;
10
+ use Laravel \ Cashier \ Cashier ;
11
11
use Livewire \Livewire ;
12
12
use PHPUnit \Framework \Attributes \Test ;
13
13
use Stripe \Checkout \Session as CheckoutSession ;
@@ -39,10 +39,8 @@ public function it_renders_successfully()
39
39
#[Test]
40
40
public function it_displays_loading_state_when_no_license_key_is_available ()
41
41
{
42
- Session::flush ();
43
-
44
42
Livewire::test (OrderSuccess::class, ['checkoutSessionId ' => 'cs_test_123 ' ])
45
- ->assertSet ('email ' , ' test@example.com ' )
43
+ ->assertSet ('email ' , null )
46
44
->assertSet ('licenseKey ' , null )
47
45
->assertSee ('License registration in progress ' )
48
46
->assertSee ('check your email ' );
@@ -51,17 +49,31 @@ public function it_displays_loading_state_when_no_license_key_is_available()
51
49
#[Test]
52
50
public function it_displays_license_key_when_available_in_database ()
53
51
{
54
- Session::flush ();
55
-
56
52
$ user = User::factory ()->create ([
57
53
'email ' => 'test@example.com ' ,
54
+ 'stripe_id ' => 'cus_test123 ' ,
58
55
]);
59
56
60
- License::factory ()->create ([
61
- 'user_id ' => $ user ->id ,
62
- 'key ' => 'db-license-key-12345 ' ,
63
- 'policy_name ' => 'max ' ,
64
- ]);
57
+ $ subscription = Cashier::$ subscriptionModel ::factory ()
58
+ ->for ($ user , 'user ' )
59
+ ->create ([
60
+ 'stripe_id ' => 'sub_test123 ' ,
61
+ ]);
62
+
63
+ $ subscriptionItem = Cashier::$ subscriptionItemModel ::factory ()
64
+ ->for ($ subscription , 'subscription ' )
65
+ ->create ([
66
+ 'stripe_id ' => 'si_test123 ' ,
67
+ 'stripe_price ' => Subscription::Max->stripePriceId (),
68
+ ]);
69
+
70
+ $ license = License::factory ()
71
+ ->for ($ user , 'user ' )
72
+ ->for ($ subscriptionItem , 'subscriptionItem ' )
73
+ ->create ([
74
+ 'key ' => 'db-license-key-12345 ' ,
75
+ 'policy_name ' => 'max ' ,
76
+ ]);
65
77
66
78
Livewire::test (OrderSuccess::class, ['checkoutSessionId ' => 'cs_test_123 ' ])
67
79
->assertSet ('email ' , 'test@example.com ' )
@@ -71,40 +83,39 @@ public function it_displays_license_key_when_available_in_database()
71
83
->assertDontSee ('License registration in progress ' );
72
84
}
73
85
74
- #[Test]
75
- public function it_uses_session_data_when_available ()
76
- {
77
- $ checkoutSessionId = 'cs_test_123 ' ;
78
-
79
- Session::put ("$ checkoutSessionId.email " , 'session@example.com ' );
80
- Session::put ("$ checkoutSessionId.license_key " , 'session-license-key ' );
81
-
82
- Livewire::test (OrderSuccess::class, ['checkoutSessionId ' => 'cs_test_123 ' ])
83
- ->assertSet ('email ' , 'session@example.com ' )
84
- ->assertSet ('licenseKey ' , 'session-license-key ' )
85
- ->assertSee ('session-license-key ' )
86
- ->assertSee ('session@example.com ' );
87
- }
88
-
89
86
#[Test]
90
87
public function it_polls_for_updates_from_database ()
91
88
{
92
- Session::flush ();
93
-
94
89
$ component = Livewire::test (OrderSuccess::class, ['checkoutSessionId ' => 'cs_test_123 ' ])
95
90
->assertSet ('licenseKey ' , null )
96
91
->assertSee ('License registration in progress ' )
97
92
->assertSeeHtml ('wire:poll.2s="loadData" ' );
98
93
99
94
$ user = User::factory ()->create ([
100
95
'email ' => 'test@example.com ' ,
96
+ 'stripe_id ' => 'cus_test123 ' ,
101
97
]);
102
98
103
- License::factory ()->create ([
104
- 'user_id ' => $ user ->id ,
105
- 'key ' => 'db-polled-license-key ' ,
106
- 'policy_name ' => 'max ' ,
107
- ]);
99
+ $ subscription = Cashier::$ subscriptionModel ::factory ()
100
+ ->for ($ user , 'user ' )
101
+ ->create ([
102
+ 'stripe_id ' => 'sub_test123 ' ,
103
+ ]);
104
+
105
+ $ subscriptionItem = Cashier::$ subscriptionItemModel ::factory ()
106
+ ->for ($ subscription , 'subscription ' )
107
+ ->create ([
108
+ 'stripe_id ' => 'si_test123 ' ,
109
+ 'stripe_price ' => Subscription::Max->stripePriceId (),
110
+ ]);
111
+
112
+ $ license = License::factory ()
113
+ ->for ($ user , 'user ' )
114
+ ->for ($ subscriptionItem , 'subscriptionItem ' )
115
+ ->create ([
116
+ 'key ' => 'db-polled-license-key ' ,
117
+ 'policy_name ' => 'max ' ,
118
+ ]);
108
119
109
120
$ component ->call ('loadData ' )
110
121
->assertSet ('licenseKey ' , 'db-polled-license-key ' )
@@ -144,9 +155,11 @@ private function mockStripeClient(): void
144
155
{
145
156
$ mockCheckoutSession = CheckoutSession::constructFrom ([
146
157
'id ' => 'cs_test_123 ' ,
158
+ 'customer ' => 'cus_test123 ' ,
147
159
'customer_details ' => [
148
160
'email ' => 'test@example.com ' ,
149
161
],
162
+ 'subscription ' => 'sub_test123 ' ,
150
163
]);
151
164
152
165
$ mockCheckoutSessionLineItems = Collection::constructFrom ([
0 commit comments