From c8a1158a6d5d929463a241a4e984959845e881ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jarno=20Kiesil=C3=A4inen?= Date: Thu, 7 Aug 2025 19:04:21 +0300 Subject: [PATCH] Fix flyway migration and use h2 in unit tests. --- .clinerules/frontend-color-theme.md | 32 ++++++++++++++++ .clinerules/git-workflow.md | 38 +++++++++++++++++++ backend/pom.xml | 8 +++- .../db/migration/V1__initial_schema.sql | 27 +++++++------ .../VibingBackendApplicationTests.java | 4 +- .../src/test/resources/application-test.yml | 19 ++++++++-- 6 files changed, 108 insertions(+), 20 deletions(-) create mode 100644 .clinerules/frontend-color-theme.md create mode 100644 .clinerules/git-workflow.md diff --git a/.clinerules/frontend-color-theme.md b/.clinerules/frontend-color-theme.md new file mode 100644 index 0000000..8b8b86d --- /dev/null +++ b/.clinerules/frontend-color-theme.md @@ -0,0 +1,32 @@ +## Brief overview +Project-specific frontend color theme guidelines for the vibing application. Defines a cohesive peach/coral/pink color palette with specific CSS custom properties, component styling patterns, and accessibility requirements. + +## Color palette usage +- Always use the defined peach-coral color scheme: Primary Peach (#FFCDB2), Secondary Coral (#FFB4A2), Light Pink (#E5989B), Medium Mauve (#B5838D), Dark Purple (#6D6875) +- Implement CSS custom properties in src/index.css for all color definitions +- Use semantic color naming: --color-primary, --color-secondary, --color-bg-dark, --color-text-primary, etc. +- Support both dark and light modes using @media (prefers-color-scheme: light) + +## Component styling patterns +- Buttons: Use gradient backgrounds, implement translateY(-2px) hover animations, apply consistent focus states with peach outline +- Cards: White backgrounds with subtle shadows, translateY(-8px) hover animations, 16px border radius, scale(1.05) image hover effects +- Links: Primary color #FFCDB2, hover colors #E5989B (dark mode) or #B5838D (light mode), no text decoration by default +- Use semantic CSS class names: .btn-primary, .btn-secondary, .btn-outline, .btn-ghost + +## Interactive states and animations +- Apply subtle lift animations using transform: translateY(-2px) for hover effects +- Use rgba(255, 205, 178, 0.3) for focus rings and primary shadows +- Use rgba(229, 152, 155, 0.3) for secondary shadows +- Ensure hover states are distinct from focus states for accessibility + +## File organization structure +- Place global styles and CSS custom properties in src/index.css +- Create individual .css files in src/components/ for component-specific styles +- Use src/App.css for utility classes +- Consider src/styles/ directory for additional theme files when needed + +## Accessibility requirements +- Maintain minimum contrast ratios: 4.5:1 for normal text, 3:1 for large text +- Use --color-focus for focus indicators +- Test with color blindness simulators +- Ensure all interactive elements have proper focus states diff --git a/.clinerules/git-workflow.md b/.clinerules/git-workflow.md new file mode 100644 index 0000000..87f31a0 --- /dev/null +++ b/.clinerules/git-workflow.md @@ -0,0 +1,38 @@ +## Brief overview +Project-specific git workflow guidelines emphasizing feature branch development, conventional commit messages, and proper branch management practices. Never work directly on main/master branches. + +## Branch management strategy +- Always create feature branches for all development work +- Use kebab-case naming: feature/user-authentication, bugfix/login-validation, hotfix/security-patch, refactor/api-endpoints +- Keep feature branches short-lived (1-3 days ideally) +- One feature per branch, don't mix different types of changes +- Delete branches after successful merge + +## Commit message conventions +- Use conventional commit format: type(scope): description +- Use present tense ("add feature" not "added feature") +- Be specific and descriptive in commit messages +- Reference issue numbers when applicable: feat(auth): add OAuth login #123 +- Make frequent, small commits with clear purposes + +## Development workflow steps +- Always start by ensuring main branch is up to date: git checkout main && git pull origin main +- Create new feature branch: git checkout -b feature/your-feature-name +- Before pushing, rebase with main: git fetch origin && git rebase origin/main +- Push feature branch: git push origin feature/your-feature-name +- Create Pull Request from feature branch to main +- Only merge after code review approval + +## Code review requirements +- Create PR for all changes, no direct commits to main +- Request reviews from team members +- Address all feedback before merging +- Ensure all tests pass before creating PR +- Self-review changes before requesting reviews +- Update documentation when needed + +## Emergency procedures +- For critical issues, create hotfix branches from main +- Make minimal necessary changes in hotfixes +- Test thoroughly before creating emergency PR +- Follow same review process even for hotfixes diff --git a/backend/pom.xml b/backend/pom.xml index c2fc485..52dc476 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -74,6 +74,12 @@ spring-security-test test + + + com.h2database + h2 + test + @@ -132,4 +138,4 @@ - \ No newline at end of file + diff --git a/backend/src/main/resources/db/migration/V1__initial_schema.sql b/backend/src/main/resources/db/migration/V1__initial_schema.sql index 5a843d9..02b0a92 100644 --- a/backend/src/main/resources/db/migration/V1__initial_schema.sql +++ b/backend/src/main/resources/db/migration/V1__initial_schema.sql @@ -1,5 +1,18 @@ CREATE SCHEMA IF NOT EXISTS vibing; +CREATE TABLE IF NOT EXISTS vibing.locations ( + id SERIAL PRIMARY KEY, + name TEXT NOT NULL, + address TEXT, + city TEXT, + country TEXT, + postal_code TEXT, + latitude DOUBLE PRECISION, + longitude DOUBLE PRECISION, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + CREATE TABLE IF NOT EXISTS vibing.activities ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, @@ -20,17 +33,3 @@ CREATE TABLE IF NOT EXISTS vibing.activity_tags ( FOREIGN KEY (activity_id) REFERENCES vibing.activities(id) ON DELETE CASCADE, PRIMARY KEY (activity_id, tag) ); - -CREATE TABLE IF NOT EXISTS vibing.locations ( - id SERIAL PRIMARY KEY, - name TEXT NOT NULL, - address TEXT, - city TEXT, - country TEXT, - postal_code TEXT, - latitude DOUBLE PRECISION, - longitude DOUBLE PRECISION, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -); - diff --git a/backend/src/test/java/com/vibing/backend/VibingBackendApplicationTests.java b/backend/src/test/java/com/vibing/backend/VibingBackendApplicationTests.java index 02d8a52..4469286 100644 --- a/backend/src/test/java/com/vibing/backend/VibingBackendApplicationTests.java +++ b/backend/src/test/java/com/vibing/backend/VibingBackendApplicationTests.java @@ -2,15 +2,17 @@ package com.vibing.backend; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; /** * Basic test class for the Vibing Backend application. */ @SpringBootTest +@ActiveProfiles("test") class VibingBackendApplicationTests { @Test void contextLoads() { // This test verifies that the Spring application context loads successfully } -} \ No newline at end of file +} diff --git a/backend/src/test/resources/application-test.yml b/backend/src/test/resources/application-test.yml index 8d92abd..b056451 100644 --- a/backend/src/test/resources/application-test.yml +++ b/backend/src/test/resources/application-test.yml @@ -1,10 +1,21 @@ spring: datasource: - url: jdbc:postgresql://localhost:5432/your_test_database - username: test_user - password: test_password + url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=PostgreSQL + username: sa + password: + driver-class-name: org.h2.Driver + + h2: + console: + enabled: true + + jpa: + hibernate: + ddl-auto: none # Let Flyway handle schema creation + show-sql: true + database-platform: org.hibernate.dialect.H2Dialect flyway: enabled: true clean-disabled: false # Allow clean in tests - locations: classpath:db/migration \ No newline at end of file + locations: classpath:db/migration