Add comprehensive tests for Parks API and models

- Implemented extensive test cases for the Parks API, covering endpoints for listing, retrieving, creating, updating, and deleting parks.
- Added tests for filtering, searching, and ordering parks in the API.
- Created tests for error handling in the API, including malformed JSON and unsupported methods.
- Developed model tests for Park, ParkArea, Company, and ParkReview models, ensuring validation and constraints are enforced.
- Introduced utility mixins for API and model testing to streamline assertions and enhance test readability.
- Included integration tests to validate complete workflows involving park creation, retrieval, updating, and deletion.
This commit is contained in:
pacnpal
2025-08-17 19:36:20 -04:00
parent 17228e9935
commit c26414ff74
210 changed files with 24155 additions and 833 deletions

View File

@@ -283,6 +283,9 @@
}
}
@layer utilities {
.pointer-events-none {
pointer-events: none;
}
.collapse {
visibility: collapse;
}
@@ -321,6 +324,9 @@
.inset-0 {
inset: calc(var(--spacing) * 0);
}
.inset-y-0 {
inset-block: calc(var(--spacing) * 0);
}
.top-0 {
top: calc(var(--spacing) * 0);
}
@@ -507,6 +513,9 @@
.mb-12 {
margin-bottom: calc(var(--spacing) * 12);
}
.-ml-0\.5 {
margin-left: calc(var(--spacing) * -0.5);
}
.-ml-1 {
margin-left: calc(var(--spacing) * -1);
}
@@ -612,6 +621,9 @@
.h-48 {
height: calc(var(--spacing) * 48);
}
.h-64 {
height: calc(var(--spacing) * 64);
}
.h-\[300px\] {
height: 300px;
}
@@ -642,6 +654,9 @@
.min-h-screen {
min-height: 100vh;
}
.w-2 {
width: calc(var(--spacing) * 2);
}
.w-3 {
width: calc(var(--spacing) * 3);
}
@@ -788,6 +803,9 @@
.cursor-grab {
cursor: grab;
}
.cursor-not-allowed {
cursor: not-allowed;
}
.cursor-pointer {
cursor: pointer;
}
@@ -1358,12 +1376,18 @@
.pt-4 {
padding-top: calc(var(--spacing) * 4);
}
.pr-3 {
padding-right: calc(var(--spacing) * 3);
}
.pr-4 {
padding-right: calc(var(--spacing) * 4);
}
.pb-4 {
padding-bottom: calc(var(--spacing) * 4);
}
.pl-3 {
padding-left: calc(var(--spacing) * 3);
}
.pl-10 {
padding-left: calc(var(--spacing) * 10);
}
@@ -1413,6 +1437,10 @@
--tw-leading: calc(var(--spacing) * 4);
line-height: calc(var(--spacing) * 4);
}
.leading-5 {
--tw-leading: calc(var(--spacing) * 5);
line-height: calc(var(--spacing) * 5);
}
.leading-6 {
--tw-leading: calc(var(--spacing) * 6);
line-height: calc(var(--spacing) * 6);
@@ -1544,12 +1572,20 @@
.text-yellow-800 {
color: var(--color-yellow-800);
}
.capitalize {
text-transform: capitalize;
}
.lowercase {
text-transform: lowercase;
}
.uppercase {
text-transform: uppercase;
}
.placeholder-gray-500 {
&::placeholder {
color: var(--color-gray-500);
}
}
.opacity-0 {
opacity: 0%;
}
@@ -2129,6 +2165,19 @@
text-decoration-line: underline;
}
}
.focus\:placeholder-gray-400 {
&:focus {
&::placeholder {
color: var(--color-gray-400);
}
}
}
.focus\:ring-1 {
&:focus {
--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
}
.focus\:ring-2 {
&:focus {
--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
@@ -2225,6 +2274,11 @@
margin-bottom: calc(var(--spacing) * 16);
}
}
.sm\:block {
@media (width >= 40rem) {
display: block;
}
}
.sm\:flex {
@media (width >= 40rem) {
display: flex;
@@ -2260,6 +2314,11 @@
justify-content: space-between;
}
}
.sm\:justify-end {
@media (width >= 40rem) {
justify-content: flex-end;
}
}
.sm\:space-x-4 {
@media (width >= 40rem) {
:where(& > :not(:last-child)) {
@@ -2318,6 +2377,11 @@
display: block;
}
}
.md\:flex {
@media (width >= 48rem) {
display: flex;
}
}
.md\:grid {
@media (width >= 48rem) {
display: grid;