4
4
5
5
use Illuminate \Database \Eloquent \Model ;
6
6
use Illuminate \Foundation \Testing \LazilyRefreshDatabase ;
7
- use Laravel \Scout \Tests \Fixtures \SearchableModelWithUnloadedValue ;
8
- use Laravel \Scout \Tests \Fixtures \SearchableUserModel ;
9
- use Laravel \Scout \Tests \Fixtures \SearchableUserModelWithCustomCreatedAt ;
10
- use Laravel \Scout \Tests \Fixtures \SearchableUserModelWithCustomSearchableData ;
11
- use Orchestra \Testbench \Concerns \WithLaravelMigrations ;
7
+ use Illuminate \Support \Collection ;
8
+ use Orchestra \Testbench \Attributes \WithConfig ;
9
+ use Orchestra \Testbench \Attributes \WithMigration ;
12
10
use Orchestra \Testbench \Concerns \WithWorkbench ;
13
11
use Orchestra \Testbench \Factories \UserFactory ;
14
12
use Orchestra \Testbench \TestCase ;
13
+ use Workbench \App \Models \SearchableUser ;
15
14
15
+ #[WithConfig('scout.driver ' , 'collection ' )]
16
+ #[WithMigration]
16
17
class CollectionEngineTest extends TestCase
17
18
{
18
- use LazilyRefreshDatabase, WithLaravelMigrations, WithWorkbench;
19
-
20
- protected function defineEnvironment ($ app )
21
- {
22
- $ app ->make ('config ' )->set ('scout.driver ' , 'collection ' );
23
- }
19
+ use LazilyRefreshDatabase;
20
+ use WithWorkbench;
24
21
25
22
protected function afterRefreshingDatabase ()
26
23
{
@@ -39,113 +36,113 @@ protected function afterRefreshingDatabase()
39
36
40
37
public function test_it_can_retrieve_results_with_empty_search ()
41
38
{
42
- $ models = SearchableUserModel ::search ()->get ();
39
+ $ models = SearchableUser ::search ()->get ();
43
40
44
41
$ this ->assertCount (2 , $ models );
45
42
}
46
43
47
44
public function test_it_can_retrieve_results ()
48
45
{
49
- $ models =
SearchableUserModel ::
search (
'Taylor ' )->
where (
'email ' ,
'[email protected] ' )->
get ();
46
+ $ models =
SearchableUser ::
search (
'Taylor ' )->
where (
'email ' ,
'[email protected] ' )->
get ();
50
47
$ this ->assertCount (1 , $ models );
51
48
$ this ->assertEquals (1 , $ models [0 ]->id );
52
49
53
- $ models = SearchableUserModel ::search ('Taylor ' )->query (function ($ query ) {
50
+ $ models = SearchableUser ::search ('Taylor ' )->query (function ($ query ) {
54
51
$ query->
where (
'email ' ,
'like ' ,
'[email protected] ' );
55
52
})->get ();
56
53
57
54
$ this ->assertCount (1 , $ models );
58
55
$ this ->assertEquals (1 , $ models [0 ]->id );
59
56
60
- $ models =
SearchableUserModel ::
search (
'Abigail ' )->
where (
'email ' ,
'[email protected] ' )->
get ();
57
+ $ models =
SearchableUser ::
search (
'Abigail ' )->
where (
'email ' ,
'[email protected] ' )->
get ();
61
58
$ this ->assertCount (1 , $ models );
62
59
$ this ->assertEquals (2 , $ models [0 ]->id );
63
60
64
- $ models =
SearchableUserModel ::
search (
'Taylor ' )->
where (
'email ' ,
'[email protected] ' )->
get ();
61
+ $ models =
SearchableUser ::
search (
'Taylor ' )->
where (
'email ' ,
'[email protected] ' )->
get ();
65
62
$ this ->assertCount (0 , $ models );
66
63
67
- $ models =
SearchableUserModel ::
search (
'Taylor ' )->
where (
'email ' ,
'[email protected] ' )->
get ();
64
+ $ models =
SearchableUser ::
search (
'Taylor ' )->
where (
'email ' ,
'[email protected] ' )->
get ();
68
65
$ this ->assertCount (1 , $ models );
69
66
70
- $ models = SearchableUserModel ::search ('otwell ' )->get ();
67
+ $ models = SearchableUser ::search ('otwell ' )->get ();
71
68
$ this ->assertCount (2 , $ models );
72
69
73
- $ models = SearchableUserModel ::search ('laravel ' )->get ();
70
+ $ models = SearchableUser ::search ('laravel ' )->get ();
74
71
$ this ->assertCount (2 , $ models );
75
72
76
- $ models = SearchableUserModel ::search ('foo ' )->get ();
73
+ $ models = SearchableUser ::search ('foo ' )->get ();
77
74
$ this ->assertCount (0 , $ models );
78
75
79
- $ models =
SearchableUserModel ::
search (
'Abigail ' )->
where (
'email ' ,
'[email protected] ' )->
get ();
76
+ $ models =
SearchableUser ::
search (
'Abigail ' )->
where (
'email ' ,
'[email protected] ' )->
get ();
80
77
$ this ->assertCount (0 , $ models );
81
78
}
82
79
83
80
public function test_it_can_retrieve_results_matching_to_custom_searchable_data ()
84
81
{
85
- $ models = SearchableUserModelWithCustomSearchableData ::search ('rolyaT ' )->get ();
82
+ $ models = SearchableUserWithCustomSearchableData ::search ('rolyaT ' )->get ();
86
83
$ this ->assertCount (1 , $ models );
87
84
}
88
85
89
86
public function test_it_can_paginate_results ()
90
87
{
91
- $ models =
SearchableUserModel ::
search (
'Taylor ' )->
where (
'email ' ,
'[email protected] ' )->
paginate ();
88
+ $ models =
SearchableUser ::
search (
'Taylor ' )->
where (
'email ' ,
'[email protected] ' )->
paginate ();
92
89
$ this ->assertCount (1 , $ models );
93
90
94
- $ models =
SearchableUserModel ::
search (
'Taylor ' )->
where (
'email ' ,
'[email protected] ' )->
paginate ();
91
+ $ models =
SearchableUser ::
search (
'Taylor ' )->
where (
'email ' ,
'[email protected] ' )->
paginate ();
95
92
$ this ->assertCount (0 , $ models );
96
93
97
- $ models =
SearchableUserModel ::
search (
'Taylor ' )->
where (
'email ' ,
'[email protected] ' )->
paginate ();
94
+ $ models =
SearchableUser ::
search (
'Taylor ' )->
where (
'email ' ,
'[email protected] ' )->
paginate ();
98
95
$ this ->assertCount (1 , $ models );
99
96
100
- $ models = SearchableUserModel ::search ('laravel ' )->paginate ();
97
+ $ models = SearchableUser ::search ('laravel ' )->paginate ();
101
98
$ this ->assertCount (2 , $ models );
102
99
103
100
$ dummyQuery = function ($ query ) {
104
101
$ query ->where ('name ' , '!= ' , 'Dummy ' );
105
102
};
106
- $ models = SearchableUserModel ::search ('laravel ' )->query ($ dummyQuery )->orderBy ('name ' )->paginate (1 , 'page ' , 1 );
103
+ $ models = SearchableUser ::search ('laravel ' )->query ($ dummyQuery )->orderBy ('name ' )->paginate (1 , 'page ' , 1 );
107
104
$ this ->assertCount (1 , $ models );
108
105
$ this ->assertEquals ('Abigail Otwell ' , $ models [0 ]->name );
109
106
110
- $ models = SearchableUserModel ::search ('laravel ' )->query ($ dummyQuery )->orderBy ('name ' )->paginate (1 , 'page ' , 2 );
107
+ $ models = SearchableUser ::search ('laravel ' )->query ($ dummyQuery )->orderBy ('name ' )->paginate (1 , 'page ' , 2 );
111
108
$ this ->assertCount (1 , $ models );
112
109
$ this ->assertEquals ('Taylor Otwell ' , $ models [0 ]->name );
113
110
}
114
111
115
112
public function test_limit_is_applied ()
116
113
{
117
- $ models = SearchableUserModel ::search ('laravel ' )->get ();
114
+ $ models = SearchableUser ::search ('laravel ' )->get ();
118
115
$ this ->assertCount (2 , $ models );
119
116
120
- $ models = SearchableUserModel ::search ('laravel ' )->take (1 )->get ();
117
+ $ models = SearchableUser ::search ('laravel ' )->take (1 )->get ();
121
118
$ this ->assertCount (1 , $ models );
122
119
}
123
120
124
121
public function test_it_can_order_results ()
125
122
{
126
- $ models = SearchableUserModel ::search ('laravel ' )->orderBy ('name ' , 'asc ' )->paginate (1 , 'page ' , 1 );
123
+ $ models = SearchableUser ::search ('laravel ' )->orderBy ('name ' , 'asc ' )->paginate (1 , 'page ' , 1 );
127
124
$ this ->assertCount (1 , $ models );
128
125
$ this ->assertEquals ('Abigail Otwell ' , $ models [0 ]->name );
129
126
130
- $ models = SearchableUserModel ::search ('laravel ' )->orderBy ('name ' , 'desc ' )->paginate (1 , 'page ' , 1 );
127
+ $ models = SearchableUser ::search ('laravel ' )->orderBy ('name ' , 'desc ' )->paginate (1 , 'page ' , 1 );
131
128
$ this ->assertCount (1 , $ models );
132
129
$ this ->assertEquals ('Taylor Otwell ' , $ models [0 ]->name );
133
130
}
134
131
135
132
public function test_it_can_order_by_latest_and_oldest ()
136
133
{
137
- $ models = SearchableUserModel ::search ('laravel ' )->latest ()->paginate (1 , 'page ' , 1 );
134
+ $ models = SearchableUser ::search ('laravel ' )->latest ()->paginate (1 , 'page ' , 1 );
138
135
$ this ->assertCount (1 , $ models );
139
136
$ this ->assertEquals ('Abigail Otwell ' , $ models [0 ]->name );
140
137
141
- $ models = SearchableUserModel ::search ('laravel ' )->oldest ()->paginate (1 , 'page ' , 1 );
138
+ $ models = SearchableUser ::search ('laravel ' )->oldest ()->paginate (1 , 'page ' , 1 );
142
139
$ this ->assertCount (1 , $ models );
143
140
$ this ->assertEquals ('Taylor Otwell ' , $ models [0 ]->name );
144
141
}
145
142
146
143
public function test_it_can_order_by_custom_model_created_at_timestamp ()
147
144
{
148
- $ query = SearchableUserModelWithCustomCreatedAt ::search ()->latest ();
145
+ $ query = SearchableUserWithCustomCreatedAt ::search ()->latest ();
149
146
150
147
$ this ->assertCount (1 , $ query ->orders );
151
148
$ this ->assertEquals ('created ' , $ query ->orders [0 ]['column ' ]);
@@ -155,8 +152,43 @@ public function test_it_calls_make_searchable_using_before_searching()
155
152
{
156
153
Model::preventAccessingMissingAttributes (true );
157
154
158
- $ models = SearchableModelWithUnloadedValue ::search ('loaded ' )->get ();
155
+ $ models = SearchableUserWithUnloadedValue ::search ('loaded ' )->get ();
159
156
160
157
$ this ->assertCount (2 , $ models );
161
158
}
162
159
}
160
+
161
+ class SearchableUserWithCustomCreatedAt extends SearchableUser
162
+ {
163
+ public const CREATED_AT = 'created ' ;
164
+ }
165
+
166
+ class SearchableUserWithCustomSearchableData extends SearchableUser
167
+ {
168
+ /** {@inheritDoc} */
169
+ public function toSearchableArray (): array
170
+ {
171
+ return [
172
+ 'reversed_name ' => strrev ($ this ->name ),
173
+ ];
174
+ }
175
+ }
176
+
177
+ class SearchableUserWithUnloadedValue extends SearchableUser
178
+ {
179
+ /** {@inheritDoc} */
180
+ public function toSearchableArray ()
181
+ {
182
+ return [
183
+ 'value ' => $ this ->unloadedValue ,
184
+ ];
185
+ }
186
+
187
+ /** {@inheritDoc} */
188
+ public function makeSearchableUsing (Collection $ models )
189
+ {
190
+ return $ models ->each (
191
+ fn ($ model ) => $ model ->unloadedValue = 'loaded ' ,
192
+ );
193
+ }
194
+ }
0 commit comments