-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathFlatPageTest.php
141 lines (107 loc) · 4.2 KB
/
FlatPageTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
<?php
use Filament\Forms\Components\TextInput;
use Panakour\FilamentFlatPage\FlatFile;
use Panakour\FilamentFlatPage\FlatFilePageManager;
function createTestPage()
{
return new class extends \Panakour\FilamentFlatPage\Pages\FlatPage
{
public function getFileName(): string
{
return 'test-page.json';
}
protected function getFlatFilePageForm(): array
{
return [
TextInput::make('title')->required(),
TextInput::make('content')->required(),
TextInput::make('translatable_text'),
];
}
protected function getTranslatableFields(): array
{
return ['translatable_text'];
}
public static function getTranslatableLocales(): array
{
return ['en', 'fr', 'el'];
}
};
}
it('can create a page, save it, and retrieve its contents', function () {
$page = createTestPage();
$page->form->fill([
'title' => 'Test Title',
'content' => 'Test Content',
]);
$page->update();
$filePath = storage_path('app/flat-pages/test-page.json');
expect(file_exists($filePath))->toBeTrue();
$manager = new FlatFilePageManager(new FlatFile);
$savedTitle = $manager->get('test-page.json', 'title');
$savedContent = $manager->get('test-page.json', 'content');
expect($savedTitle)->toBe('Test Title');
expect($savedContent)->toBe('Test Content');
unlink($filePath);
});
it('can handle updates to existing pages', function () {
$page = createTestPage();
$page->form->fill([
'title' => 'Initial Title',
'content' => 'Initial Content',
]);
$page->update();
$page->form->fill([
'title' => 'Updated Title',
'content' => 'Updated Content',
]);
$page->update();
$manager = new FlatFilePageManager(new FlatFile);
$updatedTitle = $manager->get('test-page.json', 'title');
$updatedContent = $manager->get('test-page.json', 'content');
expect($updatedTitle)->toBe('Updated Title');
expect($updatedContent)->toBe('Updated Content');
unlink(storage_path('app/flat-pages/test-page.json'));
});
it('can create a page with multilingual fields, save it, and retrieve its contents', function () {
$page = createTestPage();
$page->activeLocale = 'en';
$page->form->fill([
'title' => 'English Title',
'content' => 'English Content',
'translatable_text' => 'English Translatable Text',
]);
$page->update();
$page->activeLocale = 'fr';
$page->form->fill([
'title' => 'Titre Français',
'content' => 'Contenu Français',
'translatable_text' => 'Texte Traduisible Français',
]);
$page->update();
$page->activeLocale = 'el';
$page->form->fill([
'title' => 'Ελληνικός Τίτλος',
'content' => 'Ελληνικό Περιεχόμενο',
'translatable_text' => 'Ελληνικό Μεταφράσιμο Κείμενο',
]);
$page->update();
$filePath = storage_path('app/flat-pages/test-page.json');
expect(file_exists($filePath))->toBeTrue();
$manager = new FlatFilePageManager(new FlatFile);
expect($manager->get('test-page.json', 'translatable_text', 'en'))->toBe('English Translatable Text');
expect($manager->get('test-page.json', 'translatable_text', 'fr'))->toBe('Texte Traduisible Français');
expect($manager->get('test-page.json', 'translatable_text', 'el'))->toBe('Ελληνικό Μεταφράσιμο Κείμενο');
unlink($filePath);
});
it('returns null for non-existent translations', function () {
$page = createTestPage();
$page->activeLocale = 'en';
$page->form->fill(['title' => 'English Title', 'content' => 'English Content', 'translatable_text' => 'English Text']);
$page->update();
$manager = new FlatFilePageManager(new FlatFile);
expect($manager->get('test-page.json', 'translatable_text', 'en'))->toBe('English Text');
expect($manager->get('test-page.json', 'translatable_text', 'fr'))->toBeNull();
expect($manager->get('test-page.json', 'translatable_text', 'el'))->toBeNull();
unlink(storage_path('app/flat-pages/test-page.json'));
});