Skip to content

Commit f2c6de6

Browse files
committed
fix: Sorting files in directories does not work when config('log-viewer.defaults.folder_sorting_method') === FolderSortingMethod::ModifiedTime
- sort files within folders after sorting folders in FoldersController - writing additional tests docker compose run --rm php composer test Tests: 4 failed, 260 passed (827 assertions) Duration: 1.73s Random Order Seed: 1760137292 FAIL Tests\Feature\LogFoldersControllerTest ⨯ it can get the log files ⨯ it folders are sorted alphabetically descending when configured FAIL Tests\Unit\LogIndex\LogIndexTest ⨯ it compresses chunk if gzip is available ⨯ it can save to the cache after building up the index
1 parent 85a0e23 commit f2c6de6

File tree

5 files changed

+338
-42
lines changed

5 files changed

+338
-42
lines changed

src/Http/Controllers/FoldersController.php

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -29,24 +29,6 @@ public function index(Request $request)
2929
} else {
3030
$folders = $folders->sortAlphabeticallyDesc();
3131
}
32-
33-
// Still sort files inside folders by direction param
34-
$folders->each(function ($folder) use ($fileSortingMethod, $fileSortingOrder) {
35-
if ($fileSortingMethod === FolderSortingMethod::ModifiedTime) {
36-
if ($fileSortingOrder === 'asc') {
37-
$folder->files()->sortByEarliestFirst();
38-
} else {
39-
$folder->files()->sortByLatestFirst();
40-
}
41-
42-
} else {
43-
if ($fileSortingOrder === 'asc') {
44-
$folder->files()->sortAlphabeticallyAsc();
45-
} else {
46-
$folder->files()->sortAlphabeticallyDesc();
47-
}
48-
}
49-
});
5032
} else { // ModifiedTime
5133
if ($fileSortingOrder === 'asc') {
5234
$folders = $folders->sortByEarliestFirstIncludingFiles();
@@ -55,6 +37,24 @@ public function index(Request $request)
5537
}
5638
}
5739

40+
// Sort files within folders after sorting folders
41+
$folders->each(function ($folder) use ($fileSortingMethod, $fileSortingOrder) {
42+
if ($fileSortingMethod === FolderSortingMethod::ModifiedTime) {
43+
if ($fileSortingOrder === 'asc') {
44+
$folder->files()->sortByEarliestFirst();
45+
} else {
46+
$folder->files()->sortByLatestFirst();
47+
}
48+
49+
} else {
50+
if ($fileSortingOrder === 'asc') {
51+
$folder->files()->sortAlphabeticallyAsc();
52+
} else {
53+
$folder->files()->sortAlphabeticallyDesc();
54+
}
55+
}
56+
});
57+
5858
return LogFolderResource::collection($folders->values());
5959
}
6060

tests/Feature/LogFilesControllerAlphaSortTest.php

Lines changed: 69 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
config(['log-viewer.include_files' => ['*.log']]);
99
});
1010

11-
it('you can get alphabetically sorted default desc logs files controller', function () {
11+
it('you can get alphabetically sorted default desc logs files controller 1', function () {
12+
config(['log-viewer.defaults.folder_sorting_method' => FolderSortingMethod::Alphabetical]);
1213
config(['log-viewer.defaults.file_sorting_method' => FolderSortingMethod::Alphabetical]);
1314

1415
generateLogFiles([
@@ -28,7 +29,8 @@
2829
]);
2930
});
3031

31-
it('you can get alphabetically sorted asc logs files controller', function () {
32+
it('you can get alphabetically sorted asc logs files controller 1', function () {
33+
config(['log-viewer.defaults.folder_sorting_method' => FolderSortingMethod::Alphabetical]);
3234
config(['log-viewer.defaults.file_sorting_method' => FolderSortingMethod::Alphabetical]);
3335

3436
generateLogFiles([
@@ -48,7 +50,71 @@
4850
]);
4951
});
5052

51-
it('you can get alphabetically sorted desc logs files controller', function () {
53+
it('you can get alphabetically sorted desc logs files controller 1', function () {
54+
config(['log-viewer.defaults.folder_sorting_method' => FolderSortingMethod::Alphabetical]);
55+
config(['log-viewer.defaults.file_sorting_method' => FolderSortingMethod::Alphabetical]);
56+
57+
generateLogFiles([
58+
'one.log',
59+
'two.log',
60+
'three.log',
61+
'four.log',
62+
], randomContent: true);
63+
64+
$response = getJson(route('log-viewer.files', ['direction' => 'desc']));
65+
66+
expect(array_column($response->json(), 'name'))->toBe([
67+
'two.log',
68+
'three.log',
69+
'one.log',
70+
'four.log',
71+
]);
72+
});
73+
74+
it('you can get alphabetically sorted default desc logs files controller 2', function () {
75+
config(['log-viewer.defaults.folder_sorting_method' => FolderSortingMethod::ModifiedTime]);
76+
config(['log-viewer.defaults.file_sorting_method' => FolderSortingMethod::Alphabetical]);
77+
78+
generateLogFiles([
79+
'one.log',
80+
'two.log',
81+
'three.log',
82+
'four.log',
83+
], randomContent: true);
84+
85+
$response = getJson(route('log-viewer.files'));
86+
87+
expect(array_column($response->json(), 'name'))->toBe([
88+
'two.log',
89+
'three.log',
90+
'one.log',
91+
'four.log',
92+
]);
93+
});
94+
95+
it('you can get alphabetically sorted asc logs files controller 2', function () {
96+
config(['log-viewer.defaults.folder_sorting_method' => FolderSortingMethod::ModifiedTime]);
97+
config(['log-viewer.defaults.file_sorting_method' => FolderSortingMethod::Alphabetical]);
98+
99+
generateLogFiles([
100+
'one.log',
101+
'two.log',
102+
'three.log',
103+
'four.log',
104+
], randomContent: true);
105+
106+
$response = getJson(route('log-viewer.files', ['direction' => 'asc']));
107+
108+
expect(array_column($response->json(), 'name'))->toBe([
109+
'four.log',
110+
'one.log',
111+
'three.log',
112+
'two.log',
113+
]);
114+
});
115+
116+
it('you can get alphabetically sorted desc logs files controller 2', function () {
117+
config(['log-viewer.defaults.folder_sorting_method' => FolderSortingMethod::ModifiedTime]);
52118
config(['log-viewer.defaults.file_sorting_method' => FolderSortingMethod::Alphabetical]);
53119

54120
generateLogFiles([

tests/Feature/LogFilesControllerTimeSortTest.php

Lines changed: 75 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
config(['log-viewer.include_files' => ['*.log']]);
99
});
1010

11-
it('you can get time sorted default desc logs files controller', function () {
11+
it('you can get time sorted default desc logs files controller 1', function () {
12+
config(['log-viewer.defaults.folder_sorting_method' => FolderSortingMethod::Alphabetical]);
1213
config(['log-viewer.defaults.file_sorting_method' => FolderSortingMethod::ModifiedTime]);
13-
1414
$names = [
1515
'one.log',
1616
'two.log',
@@ -31,9 +31,9 @@
3131
]);
3232
});
3333

34-
it('you can get time sorted desc logs files controller', function () {
34+
it('you can get time sorted desc logs files controller 1', function () {
35+
config(['log-viewer.defaults.folder_sorting_method' => FolderSortingMethod::Alphabetical]);
3536
config(['log-viewer.defaults.file_sorting_method' => FolderSortingMethod::ModifiedTime]);
36-
3737
$names = [
3838
'one.log',
3939
'two.log',
@@ -55,9 +55,79 @@
5555
]);
5656
});
5757

58-
it('you can get time sorted asc logs files controller', function () {
58+
it('you can get time sorted asc logs files controller 1', function () {
59+
config(['log-viewer.defaults.folder_sorting_method' => FolderSortingMethod::Alphabetical]);
5960
config(['log-viewer.defaults.file_sorting_method' => FolderSortingMethod::ModifiedTime]);
61+
$names = [
62+
'one.log',
63+
'two.log',
64+
'three.log',
65+
];
66+
generateLogFiles($names, randomContent: true);
67+
array_map(function (string $name) {
68+
$this->travelTo(now()->addSecond());
69+
touch(storage_path('logs/'.$name), now()->timestamp);
70+
}, $names);
71+
72+
$response = getJson(route('log-viewer.files', ['direction' => 'asc']));
73+
74+
expect(array_column($response->json(), 'name'))->toBe([
75+
'one.log',
76+
'two.log',
77+
'three.log',
78+
]);
79+
});
80+
81+
it('you can get time sorted default desc logs files controller 2', function () {
82+
config(['log-viewer.defaults.folder_sorting_method' => FolderSortingMethod::ModifiedTime]);
83+
config(['log-viewer.defaults.file_sorting_method' => FolderSortingMethod::ModifiedTime]);
84+
$names = [
85+
'one.log',
86+
'two.log',
87+
'three.log',
88+
];
89+
generateLogFiles($names, randomContent: true);
90+
array_map(function (string $name) {
91+
$this->travelTo(now()->addSecond());
92+
touch(storage_path('logs/'.$name), now()->timestamp);
93+
}, $names);
6094

95+
$response = getJson(route('log-viewer.files'));
96+
97+
expect(array_column($response->json(), 'name'))->toBe([
98+
'three.log',
99+
'two.log',
100+
'one.log',
101+
]);
102+
});
103+
104+
it('you can get time sorted desc logs files controller 2', function () {
105+
config(['log-viewer.defaults.folder_sorting_method' => FolderSortingMethod::ModifiedTime]);
106+
config(['log-viewer.defaults.file_sorting_method' => FolderSortingMethod::ModifiedTime]);
107+
$names = [
108+
'one.log',
109+
'two.log',
110+
'three.log',
111+
];
112+
generateLogFiles($names, randomContent: true);
113+
array_map(function (string $name) {
114+
$this->travelTo(now()->addSecond());
115+
touch(storage_path('logs/'.$name), now()->timestamp);
116+
}, $names);
117+
118+
$response = getJson(route('log-viewer.files', ['direction' => 'desc']));
119+
// dd($response->json());
120+
121+
expect(array_column($response->json(), 'name'))->toBe([
122+
'three.log',
123+
'two.log',
124+
'one.log',
125+
]);
126+
});
127+
128+
it('you can get time sorted asc logs files controller 2', function () {
129+
config(['log-viewer.defaults.folder_sorting_method' => FolderSortingMethod::ModifiedTime]);
130+
config(['log-viewer.defaults.file_sorting_method' => FolderSortingMethod::ModifiedTime]);
61131
$names = [
62132
'one.log',
63133
'two.log',

tests/Feature/LogFoldersControllerAlphaSortTest.php

Lines changed: 102 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,20 @@
99
config(['log-viewer.include_files' => ['*/**.log']]);
1010
});
1111

12-
it('you can get alphabetically sorted default desc logs folders controller', function () {
12+
it('you can get alphabetically sorted default desc logs folders controller 1', function () {
13+
config(['log-viewer.defaults.folder_sorting_method' => FolderSortingMethod::Alphabetical]);
1314
config(['log-viewer.defaults.file_sorting_method' => FolderSortingMethod::Alphabetical]);
14-
15-
generateLogFiles([
15+
$names = [
1616
'sub/one.log',
1717
'sub/two.log',
1818
'sub/three.log',
1919
'sub/four.log',
20-
], randomContent: true);
20+
];
21+
generateLogFiles($names, randomContent: true);
22+
array_map(function (string $name) {
23+
$this->travelTo(now()->addSecond());
24+
touch(storage_path('logs/'.$name), now()->timestamp);
25+
}, $names);
2126

2227
$response = getJson(route('log-viewer.folders'));
2328

@@ -29,15 +34,20 @@
2934
]);
3035
});
3136

32-
it('you can get alphabetically sorted asc logs folders controller', function () {
37+
it('you can get alphabetically sorted asc logs folders controller 1', function () {
38+
config(['log-viewer.defaults.folder_sorting_method' => FolderSortingMethod::Alphabetical]);
3339
config(['log-viewer.defaults.file_sorting_method' => FolderSortingMethod::Alphabetical]);
34-
35-
generateLogFiles([
40+
$names = [
3641
'sub/one.log',
3742
'sub/two.log',
3843
'sub/three.log',
3944
'sub/four.log',
40-
], randomContent: true);
45+
];
46+
generateLogFiles($names, randomContent: true);
47+
array_map(function (string $name) {
48+
$this->travelTo(now()->addSecond());
49+
touch(storage_path('logs/'.$name), now()->timestamp);
50+
}, $names);
4151

4252
$response = getJson(route('log-viewer.folders', ['direction' => 'asc']));
4353

@@ -49,15 +59,96 @@
4959
]);
5060
});
5161

52-
it('you can get alphabetically sorted desc logs folders controller', function () {
62+
it('you can get alphabetically sorted desc logs folders controller 1', function () {
63+
config(['log-viewer.defaults.folder_sorting_method' => FolderSortingMethod::Alphabetical]);
5364
config(['log-viewer.defaults.file_sorting_method' => FolderSortingMethod::Alphabetical]);
65+
$names = [
66+
'sub/one.log',
67+
'sub/two.log',
68+
'sub/three.log',
69+
'sub/four.log',
70+
];
71+
generateLogFiles($names, randomContent: true);
72+
array_map(function (string $name) {
73+
$this->travelTo(now()->addSecond());
74+
touch(storage_path('logs/'.$name), now()->timestamp);
75+
}, $names);
5476

55-
generateLogFiles([
77+
$response = getJson(route('log-viewer.folders', ['direction' => 'desc']));
78+
79+
expect(array_column($response->json()[0]['files'], 'name'))->toBe([
80+
'two.log',
81+
'three.log',
82+
'one.log',
83+
'four.log',
84+
]);
85+
});
86+
87+
// не работает сортировка файлов при config(['log-viewer.defaults.folder_sorting_method' => FolderSortingMethod::ModifiedTime])
88+
it('you can get alphabetically sorted default desc logs folders controller 2', function () {
89+
config(['log-viewer.defaults.folder_sorting_method' => FolderSortingMethod::ModifiedTime]);
90+
config(['log-viewer.defaults.file_sorting_method' => FolderSortingMethod::Alphabetical]);
91+
$names = [
92+
'sub/one.log',
93+
'sub/two.log',
94+
'sub/three.log',
95+
'sub/four.log',
96+
];
97+
generateLogFiles($names, randomContent: true);
98+
array_map(function (string $name) {
99+
$this->travelTo(now()->addSecond());
100+
touch(storage_path('logs/'.$name), now()->timestamp);
101+
}, $names);
102+
103+
$response = getJson(route('log-viewer.folders'));
104+
105+
expect(array_column($response->json()[0]['files'], 'name'))->toBe([
106+
'two.log',
107+
'three.log',
108+
'one.log',
109+
'four.log',
110+
]);
111+
});
112+
113+
it('you can get alphabetically sorted asc logs folders controller 2', function () {
114+
config(['log-viewer.defaults.folder_sorting_method' => FolderSortingMethod::ModifiedTime]);
115+
config(['log-viewer.defaults.file_sorting_method' => FolderSortingMethod::Alphabetical]);
116+
$names = [
117+
'sub/one.log',
118+
'sub/two.log',
119+
'sub/three.log',
120+
'sub/four.log',
121+
];
122+
generateLogFiles($names, randomContent: true);
123+
array_map(function (string $name) {
124+
$this->travelTo(now()->addSecond());
125+
touch(storage_path('logs/'.$name), now()->timestamp);
126+
}, $names);
127+
128+
$response = getJson(route('log-viewer.folders', ['direction' => 'asc']));
129+
130+
expect(array_column($response->json()[0]['files'], 'name'))->toBe([
131+
'four.log',
132+
'one.log',
133+
'three.log',
134+
'two.log',
135+
]);
136+
});
137+
138+
it('you can get alphabetically sorted desc logs folders controller 2', function () {
139+
config(['log-viewer.defaults.folder_sorting_method' => FolderSortingMethod::ModifiedTime]);
140+
config(['log-viewer.defaults.file_sorting_method' => FolderSortingMethod::Alphabetical]);
141+
$names = [
56142
'sub/one.log',
57143
'sub/two.log',
58144
'sub/three.log',
59145
'sub/four.log',
60-
], randomContent: true);
146+
];
147+
generateLogFiles($names, randomContent: true);
148+
array_map(function (string $name) {
149+
$this->travelTo(now()->addSecond());
150+
touch(storage_path('logs/'.$name), now()->timestamp);
151+
}, $names);
61152

62153
$response = getJson(route('log-viewer.folders', ['direction' => 'desc']));
63154

0 commit comments

Comments
 (0)