diff --git a/Jenkinsfile b/Jenkinsfile index 52e7deb..e792a8a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -3,6 +3,7 @@ pipeline { environment { DatabaseUrl = sh(returnStdout: true, script: 'bash /var/lib/jenkins/variables/CureNet/var.sh ${BRANCH_NAME} DatabaseUrl').trim() + DatabaseUrlTesting = sh(returnStdout: true, script: 'bash /var/lib/jenkins/variables/CureNet/var.sh test DatabaseUrl').trim() } stages { @@ -58,7 +59,7 @@ pipeline { } } - stage('Configure') { + stage('Configure for tests') { parallel { stage('Frontend') { steps { @@ -73,8 +74,9 @@ pipeline { steps { dir(path: 'src/backend') { sh 'APP_SECRET=`php8.0 -r "echo md5(\\"branch=${BRANCH_NAME};\\");"` && sed -i "s/APP_SECRET=.*/APP_SECRET=${APP_SECRET}/g" .env' - sh 'sed -i "s/DATABASE_URL=.*/DATABASE_URL=${DatabaseUrl}/g" .env.dev' - sh 'composer dump-env dev' + sh 'sed -i "s/DATABASE_URL=.*/DATABASE_URL=${DatabaseUrlTesting}/g" .env.test' + sh 'composer dump-env test' + sh 'php bin/console doctrine:schema:update --force'; } } @@ -106,6 +108,31 @@ pipeline { } } + stage('Configure') { + parallel { + stage('Frontend') { + steps { + dir(path: 'src/frontend') { + sh 'echo skip' + } + + } + } + + stage('Backend') { + steps { + dir(path: 'src/backend') { + sh 'APP_SECRET=`php8.0 -r "echo md5(\\"branch=${BRANCH_NAME};\\");"` && sed -i "s/APP_SECRET=.*/APP_SECRET=${APP_SECRET}/g" .env' + sh 'sed -i "s/DATABASE_URL=.*/DATABASE_URL=${DatabaseUrl}/g" .env.dev' + sh 'composer dump-env dev' + } + + } + } + + } + } + stage('Build') { parallel { stage('Frontend') { diff --git a/src/backend/.env.test b/src/backend/.env.test index 9e7162f..06142a2 100644 --- a/src/backend/.env.test +++ b/src/backend/.env.test @@ -4,3 +4,4 @@ APP_SECRET='$ecretf0rt3st' SYMFONY_DEPRECATIONS_HELPER=999999 PANTHER_APP_ENV=panther PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots +DATABASE_URL="postgresql://db_user:db_password@127.0.0.1:5432/db_name?serverVersion=13&charset=utf8" diff --git a/src/frontend/src/app/app.component.ts b/src/frontend/src/app/app.component.ts index 446080d..9bbdd01 100644 --- a/src/frontend/src/app/app.component.ts +++ b/src/frontend/src/app/app.component.ts @@ -36,7 +36,7 @@ export class AppComponent { avatar: 'https://www.gravatar.com/avatar/81b206a89f89d5b1123b87606075c6a8?s=514&d=robohash', }; - get isSidebarOpen() { + get isSidebarOpen(): boolean { switch (this.sidebarOpen) { case SidebarOpenEnum.Open: return true; @@ -86,7 +86,7 @@ export class AppComponent { } } - onThemeChanged(theme: string) { + onThemeChanged(theme: string): void { if (theme === undefined) { return; } @@ -95,7 +95,7 @@ export class AppComponent { this.isDark = theme.indexOf('dark') !== -1; } - onResize(size: WindowSize) { + onResize(size: WindowSize): void { if (size === undefined) { return; } @@ -104,7 +104,7 @@ export class AppComponent { this.sidebarMode = this.isMobile ? 'over' : 'side'; } - onLangChanged(lang: string) { + onLangChanged(lang: string): void { if (lang === undefined) { return; } @@ -112,16 +112,16 @@ export class AppComponent { this.langControl.setValue(lang); } - toggleSidebar() { + toggleSidebar(): void { this.sidebarOpen = this.isSidebarOpen ? SidebarOpenEnum.Closed : SidebarOpenEnum.Open; this.browserStorageService.setItem('sidebar.open', this.sidebarOpen); } - onSidebarOpenedChange(opened: boolean) { + onSidebarOpenedChange(opened: boolean): void { this.sidebarOpen = opened ? SidebarOpenEnum.Open : SidebarOpenEnum.Closed; } url(url: string): SafeStyle { return this.sanitizer.bypassSecurityTrustStyle(`url('${url}')`); } -} \ No newline at end of file +} diff --git a/src/frontend/src/app/app.module.ts b/src/frontend/src/app/app.module.ts index 6b83379..aadeb8f 100644 --- a/src/frontend/src/app/app.module.ts +++ b/src/frontend/src/app/app.module.ts @@ -12,7 +12,7 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { TranslateHttpLoader } from '@ngx-translate/http-loader'; -export function HttpLoaderFactory(http: HttpClient) { +export function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader { return new TranslateHttpLoader(http, '/assets/lang/', '.json'); } diff --git a/src/frontend/src/app/modules/shared/services/app/app.service.ts b/src/frontend/src/app/modules/shared/services/app/app.service.ts index 40ae29e..5299e2d 100644 --- a/src/frontend/src/app/modules/shared/services/app/app.service.ts +++ b/src/frontend/src/app/modules/shared/services/app/app.service.ts @@ -13,13 +13,14 @@ export class WindowSize { this.isMobile = this.width <= 700; } - update() { - this.width = window.innerWidth; - this.height = window.innerHeight; + static generate(): WindowSize { + return new WindowSize(window.innerWidth, window.innerHeight); } - static generate() { - return new WindowSize(window.innerWidth, window.innerHeight); + update(): WindowSize { + this.width = window.innerWidth; + this.height = window.innerHeight; + return this; } } @@ -41,29 +42,29 @@ export class AppService { }); this.sizeChange.subscribe(size => this.size = size); this.sizeChange.next(WindowSize.generate()); - let lang = browserStorageService.getItem('language'); - if (!lang) { - lang = this.defaultLang; + let language = browserStorageService.getItem('language'); + if (!language) { + language = this.defaultLang; } this.translate.setDefaultLang(this.defaultLang); - this.changeLang(lang); + this.changeLang(language); fromEvent(window, 'resize').subscribe(e => { this.sizeChange.next(WindowSize.generate()); - }) + }); } - changeLang(lang: string) { + changeLang(lang: string): void { if (lang !== this.lang) { this.translate.use(lang); this.langChange.next(lang); } } - getLang() { + getLang(): string { return this.lang; } - getLangs() { + getLangs(): string[] { return [ 'pl', 'en', diff --git a/src/frontend/src/app/modules/shared/services/browser-storage/browser-storage.service.ts b/src/frontend/src/app/modules/shared/services/browser-storage/browser-storage.service.ts index 5ed4972..fad291e 100644 --- a/src/frontend/src/app/modules/shared/services/browser-storage/browser-storage.service.ts +++ b/src/frontend/src/app/modules/shared/services/browser-storage/browser-storage.service.ts @@ -5,12 +5,13 @@ export class BrowserStorageService { private storage: Storage; private namespace: string; + constructor() { this.storage = localStorage; this.namespace = 'default'; } - setNamespace(namespace: string) { + setNamespace(namespace: string): void { this.namespace = namespace; } @@ -18,7 +19,7 @@ export class BrowserStorageService { return namespace ?? this.namespace; } - setItem(key: string, value: any, namespace: string | null = null) { + setItem(key: string, value: any, namespace: string | null = null): void { namespace = this.getNamespace(namespace); const path = `${namespace}.${key}`; this.storage.setItem(path, JSON.stringify(value)); diff --git a/src/frontend/src/app/modules/shared/services/theme/theme.service.ts b/src/frontend/src/app/modules/shared/services/theme/theme.service.ts index 080d21c..637f7d9 100644 --- a/src/frontend/src/app/modules/shared/services/theme/theme.service.ts +++ b/src/frontend/src/app/modules/shared/services/theme/theme.service.ts @@ -21,11 +21,11 @@ export class ThemeService { this.setTheme(userTheme); } - getTheme() { + getTheme(): string { return this.theme; } - setTheme(theme: string) { + setTheme(theme: string): void { if (theme !== this.theme) { this.themeChange.next(theme); document.getElementById('current-theme').setAttribute('href', `/${theme}.css`); @@ -37,5 +37,5 @@ export class ThemeService { 'light', 'dark', ]; - }; + } }