Cześć, w jaki sposób mogę podczas testów w Laravel sprawdzić czy dane kolumnie jakiejś tabeli są wstawiane według pewnego formatu ? Np chce sprawdzić czy numer telefonu w bazie danych jest w formacie 111-111-111. czy jest do tego jakaś assercja ?
phpowiec napisał(a):
Cześć, w jaki sposób mogę podczas testów w Laravel sprawdzić czy dane kolumnie jakiejś tabeli są wstawiane według pewnego formatu ? Np chce sprawdzić czy numer telefonu w bazie danych jest w formacie 111-111-111. czy jest do tego jakaś assercja ?
Taki test nie za bardzo ma sens, nie potrzebujesz sprawdzać co siedzi w bazie.
Riddle napisał(a):
phpowiec napisał(a):
Cześć, w jaki sposób mogę podczas testów w Laravel sprawdzić czy dane kolumnie jakiejś tabeli są wstawiane według pewnego formatu ? Np chce sprawdzić czy numer telefonu w bazie danych jest w formacie 111-111-111. czy jest do tego jakaś assercja ?
Taki test nie za bardzo ma sens, nie potrzebujesz sprawdzać co siedzi w bazie.
To jak wprowadzam numer w formacie 111222333 to jak mogę sprawdzić czy zapisał się w formacie 111-222-333 ?
Wygląda mi to na próbę implementacji logiki po stronie bazy danych co nie jest dobrą opcją i tak jak napisał @Riddle nie powinieneś tego robić. Konwersja typu/formatu powinna odbywać się po stronie aplikacji.
Ale jeżeli się upierasz to rozwiązaniem byłby test integracyjny w którym pod spodem masz prawdziwą bazę danych lub jakąś wersję in-memory o ile istnieje. W teście wstawiasz do bazy rekord zawierający wspomniany numer i po zapisie pobierasz ten rekord i sprawdzasz czy ma format taki jaki oczekujesz.
Jeżeli koniecznie chcesz to robić po stronie bazy, co CZASAMI może mieć sens w specyficznych przypadkach to możesz to zrobić przez wyzwalacz / trigger odpalany przed stawieniem danych (BEFORE INSERT) lub przed edycją danych (BEFORE UPDATE) który przy pomocy odpowiedniej funkcji np. języka PL/SQL sprawdzi czy format jest odpowiedni i dopuści lub nie dopuści do wstawienia lub edycji danych.
assertDatabaseHas - sprawdzasz czy podane wartości łącznie występują w jakimś rekordzie. https://laravel.com/docs/10.x/database-testing#available-assertions
phpowiec napisał(a):
Cześć, w jaki sposób mogę podczas testów w Laravel sprawdzić czy dane kolumnie jakiejś tabeli są wstawiane według pewnego formatu ? Np chce sprawdzić czy numer telefonu w bazie danych jest w formacie 111-111-111. czy jest do tego jakaś assercja
Skąd ci się wzięło 111-111-111? Wydaje się jak błąd na poziomie samych założeń, że numer telefonu musi mieć 9 cyfr i że będzie się je oddzielać w ten sposób.
Może dla polskich komórek się to sprawdzi, ale telefony mogą być zagraniczne, stacjonarne…
do bazy wrzucasz normalnei numer np ciagly. gdy wpisujesz numer to w polu do wpisywania zakladasz filtr ktory zmienia ci numer na dany format wizualnie, albo jak pobierasz z bazy to dajesz do filtra wlasnego ktory wysle to do widoku, albo do textfield ktory ma juz filtr np gdy edytujesz kontakt.
@chomikowski: lepiej custom accessora jeśli już. To jest laravel :p