Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion back/backend/sitmun-backend-core
Submodule sitmun-backend-core updated 98 files
+4 −0 CHANGELOG.md
+3 −1 build.gradle
+33 −0 config/db/changelog/01_schema.h2.sql
+29 −0 config/db/changelog/01_schema.oracle.sql
+29 −0 config/db/changelog/01_schema.postgres.sql
+40 −0 config/db/changelog/12_task_relation_reference_alias.yaml
+25 −0 config/db/changelog/13_add_translation_sequences.sql
+106 −0 config/db/changelog/13_literal_translations.yaml
+141 −0 config/db/changelog/14_literal_translation_source_language.yaml
+80 −0 config/db/changelog/15_more_info_advanced_e2e.yaml
+15 −0 config/db/changelog/db.changelog-master.yaml
+6 −0 gradle/libs.versions.toml
+68 −0 src/main/java/org/sitmun/administration/controller/LiteralTranslationController.java
+88 −0 src/main/java/org/sitmun/administration/controller/LiteralTranslationCsvController.java
+63 −0 src/main/java/org/sitmun/administration/controller/TemplatePreviewController.java
+13 −0 src/main/java/org/sitmun/administration/controller/dto/LiteralTranslationCsvExportRequestDto.java
+4 −0 src/main/java/org/sitmun/administration/controller/dto/LiteralTranslationCsvImportErrorDto.java
+22 −0 src/main/java/org/sitmun/administration/controller/dto/LiteralTranslationCsvImportResponseDto.java
+15 −0 src/main/java/org/sitmun/administration/controller/dto/LiteralTranslationListItemDto.java
+16 −0 src/main/java/org/sitmun/administration/controller/dto/LiteralTranslationUpsertRequestDto.java
+13 −0 src/main/java/org/sitmun/administration/controller/dto/MoreInfoAdvancedRenderRequestDto.java
+11 −0 src/main/java/org/sitmun/administration/controller/dto/MoreInfoAdvancedRenderResponseDto.java
+12 −0 src/main/java/org/sitmun/administration/controller/dto/MoreInfoAdvancedRenderedTaskDto.java
+13 −0 src/main/java/org/sitmun/administration/controller/dto/TemplatePreviewRequestDto.java
+12 −0 src/main/java/org/sitmun/administration/controller/dto/TemplatePreviewResponseDto.java
+14 −0 src/main/java/org/sitmun/administration/controller/dto/TemplateTaskExecutionRequestDto.java
+17 −0 src/main/java/org/sitmun/administration/controller/dto/TemplateTaskExecutionResponseDto.java
+61 −0 src/main/java/org/sitmun/administration/service/csv/AbstractOpenCsvService.java
+67 −19 src/main/java/org/sitmun/administration/service/database/DatabaseConnectionService.java
+26 −0 src/main/java/org/sitmun/administration/service/i18n/CurrentRequestLanguageResolver.java
+316 −0 src/main/java/org/sitmun/administration/service/i18n/LiteralTranslationCrudService.java
+636 −0 src/main/java/org/sitmun/administration/service/i18n/LiteralTranslationCsvService.java
+33 −0 src/main/java/org/sitmun/administration/service/i18n/LiteralTranslationFilterModel.java
+6 −0 src/main/java/org/sitmun/administration/service/i18n/LiteralTranslationResolver.java
+33 −0 src/main/java/org/sitmun/administration/service/i18n/LiteralTranslationService.java
+32 −0 src/main/java/org/sitmun/administration/service/i18n/TemplateLiteralProcessor.java
+170 −0 src/main/java/org/sitmun/administration/service/template/TemplateContextNormalizer.java
+1,141 −0 src/main/java/org/sitmun/administration/service/template/TemplateExecutionService.java
+340 −0 src/main/java/org/sitmun/administration/service/template/TemplateRenderService.java
+62 −0 src/main/java/org/sitmun/administration/service/template/TemplateRequestCoordinatesService.java
+7 −0 src/main/java/org/sitmun/administration/service/template/childdata/ChildDataOutcome.java
+20 −0 src/main/java/org/sitmun/administration/service/template/childdata/ChildDataRequest.java
+33 −0 src/main/java/org/sitmun/administration/service/template/childdata/ChildDataResult.java
+605 −0 src/main/java/org/sitmun/administration/service/template/childdata/InProcessTemplateChildDataAdapter.java
+7 −0 src/main/java/org/sitmun/administration/service/template/childdata/PrincipalKind.java
+10 −0 src/main/java/org/sitmun/administration/service/template/childdata/TemplateChildDataPort.java
+4 −0 src/main/java/org/sitmun/authorization/client/dto/TaskDto.java
+1 −0 src/main/java/org/sitmun/authorization/client/service/TaskBasicService.java
+1 −0 src/main/java/org/sitmun/authorization/client/service/TaskEditCartographyService.java
+27 −1 src/main/java/org/sitmun/authorization/client/service/TaskMoreInfoService.java
+1 −0 src/main/java/org/sitmun/authorization/client/service/TaskQueryCartographyService.java
+1 −0 src/main/java/org/sitmun/authorization/client/service/TaskQuerySqlService.java
+1 −0 src/main/java/org/sitmun/authorization/client/service/TaskQueryUrlService.java
+1 −0 src/main/java/org/sitmun/authorization/client/service/TaskQueryWebService.java
+11 −0 src/main/java/org/sitmun/domain/DomainConstants.java
+10 −0 src/main/java/org/sitmun/domain/application/ApplicationRepository.java
+9 −1 src/main/java/org/sitmun/domain/task/availability/TaskAvailabilityRepository.java
+4 −0 src/main/java/org/sitmun/domain/task/relation/TaskRelation.java
+10 −1 src/main/java/org/sitmun/domain/task/relation/TaskRelationRepository.java
+57 −0 src/main/java/org/sitmun/infrastructure/persistence/type/i18n/LiteralTranslation.java
+12 −0 src/main/java/org/sitmun/infrastructure/persistence/type/i18n/LiteralTranslationQuerydslRepository.java
+174 −0 src/main/java/org/sitmun/infrastructure/persistence/type/i18n/LiteralTranslationQuerydslRepositoryImpl.java
+42 −0 src/main/java/org/sitmun/infrastructure/persistence/type/i18n/LiteralTranslationRepository.java
+67 −0 src/main/java/org/sitmun/infrastructure/persistence/type/i18n/LiteralTranslationValue.java
+43 −0 src/main/java/org/sitmun/infrastructure/persistence/type/i18n/LiteralTranslationValueRepository.java
+5 −0 src/main/java/org/sitmun/infrastructure/security/config/WebSecurityConfigurer.java
+6 −0 src/main/resources/application.yml
+82 −0 src/test/java/org/sitmun/administration/controller/LiteralTranslationCsvControllerTest.java
+135 −0 src/test/java/org/sitmun/administration/controller/TemplatePreviewControllerWebMvcTest.java
+34 −0 src/test/java/org/sitmun/administration/controller/dto/TemplatePreviewDtoTest.java
+51 −0 src/test/java/org/sitmun/administration/service/database/DatabaseConnectionServiceTest.java
+224 −0 src/test/java/org/sitmun/administration/service/i18n/LiteralTranslationCrudServiceTest.java
+244 −0 src/test/java/org/sitmun/administration/service/i18n/LiteralTranslationCsvServiceTest.java
+46 −0 src/test/java/org/sitmun/administration/service/i18n/LiteralTranslationServiceTest.java
+34 −0 src/test/java/org/sitmun/administration/service/i18n/TemplateLiteralProcessorTest.java
+141 −0 src/test/java/org/sitmun/administration/service/template/TemplateContextNormalizerTest.java
+3,175 −0 src/test/java/org/sitmun/administration/service/template/TemplateExecutionServiceTest.java
+258 −0 src/test/java/org/sitmun/administration/service/template/TemplateRenderServiceTest.java
+233 −0 src/test/java/org/sitmun/administration/service/template/childdata/InProcessTemplateChildDataAdapterTest.java
+3 −0 src/test/java/org/sitmun/authorization/client/controller/ClientConfigurationControllerTest.java
+3 −0 src/test/java/org/sitmun/authorization/client/controller/ClientConfigurationPositionControllerTest.java
+50 −0 src/test/java/org/sitmun/authorization/client/service/TaskMoreInfoServiceTest.java
+19 −0 src/test/java/org/sitmun/domain/DomainConstantsTemplateTaskTest.java
+1 −4 src/test/java/org/sitmun/domain/cartography/CartographyRepositoryTest.java
+117 −0 src/test/java/org/sitmun/infrastructure/persistence/type/i18n/LiteralTranslationLobRoundTripIT.java
+130 −0 src/test/java/org/sitmun/infrastructure/security/config/TemplateMoreInfoAdvancedRenderSecurityTest.java
+1 −1 src/test/java/org/sitmun/infrastructure/security/service/JsonWebTokenServiceTest.java
+1,148 −0 src/test/resources/db/changelog/01_schema.h2.sql
+1,053 −0 src/test/resources/db/changelog/01_schema.oracle.sql
+1,055 −0 src/test/resources/db/changelog/01_schema.postgres.sql
+28 −0 src/test/resources/db/changelog/07_sequences.sql
+40 −0 src/test/resources/db/changelog/12_task_relation_reference_alias.yaml
+25 −0 src/test/resources/db/changelog/13_add_translation_sequences.sql
+106 −0 src/test/resources/db/changelog/13_literal_translations.yaml
+141 −0 src/test/resources/db/changelog/14_literal_translation_source_language.yaml
+13 −0 src/test/resources/db/changelog/db.changelog-h2.yaml
+13 −0 src/test/resources/db/changelog/db.changelog-oracle.yaml
+13 −0 src/test/resources/db/changelog/db.changelog-postgres.yaml
4 changes: 4 additions & 0 deletions e2e/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Browser E2E against backend-core on in-memory H2. No Docker Compose.
- Role form: validation, create, edit, reload persistence
- User form: validation, create, edit, reload persistence
- Territory form: validation, create (with type), edit, reload persistence
- Plantilla dry-run: ADMIN `POST /api/tasks/template/preview` and `/execute-child` without required `appId`/`terId` (`e2e/admin/forms/template-execute-child.spec.ts`, project `admin-forms`)

### Viewer (`npm run e2e:viewer`)

Expand All @@ -21,6 +22,7 @@ Browser E2E against backend-core on in-memory H2. No Docker Compose.
- Layer catalog (`viewer-catalog`): radio folder children render native radios; `loadData` folders get a visible load control (checkbox, or radio when the folder is radio; title expand-only); non-radio cartography leaves get `sitmun-lcat-leaf-load` checkboxes (toggle work layer); child radios still work when `loadData` is off; queryable leaves show `.sitmun-lcat-gfi` after select when setup enables `queryableActive` + layer `queryableFeatureEnabled` (meta stamp asserted when SITNA renders info); row geometry asserts fixed 18px select/GFI controls when present (no empty spacers), level-stamped inset (`data-sitmun-lcat-level` 0/1/2…), nest step = type-icon width (16px, parent pad cancelled on nested `ul`), vertical centers, and meta ≥18×18 hit box; visible Capas disponibles rows stamp alternating `data-sitmun-lcat-zebra`; folder titles stay roman under `tc-checked`. Capas trash-then-clear after partial remove is asserted in viewer Jest (`layer-catalog-control.handler`). Playwright covers Capas row after radio load, out-of-scale `#777777` path color (#92), WLM/LCAT non-overlap and runtime tools-panel splitters (#142), and map-chrome stacking at 480/768/1024 (#135); stub serves GetMap PNG and GetMap OnlineResource (rewritten by proxy) so Capas rows are not cleared by TILELOADERROR.
- Map legend (`viewer-legend`): after loading a stubbed catalog leaf, Capas shows capabilities `LegendURL` imagery and the Legend task shows symbology when the stub denies `DescribeLayer` and fails `/wms` GetLegendGraphic (DiBa/ArcGIS-style #164); setup enables `sitna.legend` task-availability
- No base map (`viewer-basemap`): basemap selector option `sitmun-no-base-map` clears raster basemap to a white viewport while a catalog leaf stays visible (#167); setup enables `sitna.basemapSelector` task-availability
- More Info Advanced (`viewer-mia`): profile includes `sitna.moreInfoAdvanced` + type-16 parent on Toponímia; FeatureInfo `responseCallback` opens `.sitmun-mia-popup-overlay` and `POST /api/tasks/template/more-info-advanced/render` carries `appId`/`terId` body plus `lang` query ([sitmun-viewer-app#162](https://github.com/sitmun/sitmun-viewer-app/pull/162)); setup enables MIA + featureInfo task-availability
- Local Basic-auth upstream stub (plus unauthenticated `/legend` PNG for #164); production Liquibase is not modified

### Application contact (`npx playwright test --config=playwright.application-contact.config.ts`)
Expand Down Expand Up @@ -97,6 +99,8 @@ npm run e2e:viewer -- --project=viewer-public
npm run e2e:viewer -- --project=viewer-password
npm run e2e:viewer -- --project=viewer-catalog
npm run e2e:viewer -- --project=viewer-legend
npm run e2e:viewer -- --project=viewer-basemap
npm run e2e:viewer -- --project=viewer-mia

# admin → viewer responsible institution (shared backend)
npx playwright test --config=playwright.application-contact.config.ts
Expand Down
2 changes: 1 addition & 1 deletion e2e/admin/fixtures.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { test as base, expect, APIRequestContext } from '@playwright/test';

export type CreatedResource = {
collection: 'roles' | 'users' | 'territories';
collection: 'roles' | 'users' | 'territories' | 'tasks';
id: number;
};

Expand Down
79 changes: 79 additions & 0 deletions e2e/admin/forms/template-execute-child.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import { test, expect } from '../fixtures';

/**
* Minimal Plantilla dry-run: ADMIN template APIs without required appId/terId (god mode).
* TipTap/CSV stay in Jest; map MIA render stays in viewer E2E.
*
* Seed note: H2 has no typeId 15 Plantilla rows, and POST /api/tasks often drops
* `properties` (JsonView), so creating a disposable child is unreliable. Use a seeded
* Query task with scope `web-api-query-no-proxy` (resolveDirect → 200, no JDBC).
*/
test.describe('Plantilla template dry-run', () => {
test('preview accepts ADMIN body without appId/terId', async ({ request }) => {
const body = {
templateTaskId: null,
templateHtml: '<p>e2e-preview</p>',
context: {},
knownTaskReferences: [],
};

const response = await request.post('/backend/api/tasks/template/preview', {
headers: {
'X-SITMUN-Client': 'admin',
'Content-Type': 'application/json',
},
data: body,
});

expect(
response.status(),
`preview failed: ${response.status()} ${await response.text()}`,
).toBe(200);

const json = await response.json();
expect(json).toHaveProperty('html');
expect(JSON.stringify(body)).not.toMatch(/"appId"|"terId"/);
});

test('execute-child accepts ADMIN body without appId/terId', async ({ request }) => {
const headers = {
'X-SITMUN-Client': 'admin',
'Content-Type': 'application/json',
};

// Seeded STM_TASK id 38: web-api-query-no-proxy (resolveDirect; no JDBC).
const seeded = await request.get('/backend/api/tasks/38?projection=view', {
headers: { 'X-SITMUN-Client': 'admin' },
});
expect(
seeded.ok(),
`seeded query task 38 missing: ${seeded.status()} ${await seeded.text()}`,
).toBeTruthy();
const seededTask = await seeded.json();
expect(String(seededTask.properties?.scope ?? '').toLowerCase()).toBe(
'web-api-query-no-proxy',
);
const linkedTaskId = 38;
const body = {
templateTaskId: null,
linkedTaskId,
parameters: { codigo: 'e2e' },
childTaskParameters: null,
};

const response = await request.post('/backend/api/tasks/template/execute-child', {
headers,
data: body,
});

expect(
response.status(),
`execute-child failed: ${response.status()} ${await response.text()}`,
).toBe(200);

const json = await response.json();
expect(json).toHaveProperty('taskId', linkedTaskId);
expect(json).toHaveProperty('status');
expect(JSON.stringify(body)).not.toMatch(/"appId"|"terId"/);
});
});
18 changes: 18 additions & 0 deletions e2e/viewer/fixtures.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,24 @@ export const LEGEND_TASK_ID = 12;
export const WORK_LAYER_MANAGER_TASK_ID = 31;
/** Seed STM_TASK id for sitna.basemapSelector (STM_TSK_UI TUI_ID 2). */
export const BASEMAP_SELECTOR_TASK_ID = 2;
/**
* Map chrome tasks for #135 left-toolbar stack (missing from STM_AVAIL_TSK).
* Mirrors partner Menorca profile 12/4: navBar, fullScreen, streetView, threed.
*/
export const FULL_SCREEN_TASK_ID = 9;
export const NAV_BAR_TASK_ID = 16;
/** Bottom-right overview (folded map) tab for #135 right-chrome checks. */
export const OVERVIEW_MAP_TASK_ID = 18;
/** Search control — must stay clear of the left icon column (#135). */
export const SEARCH_TASK_ID = 24;
export const STREET_VIEW_TASK_ID = 26;
export const THREE_D_TASK_ID = 27;
/** Seed UI control sitna.moreInfoAdvanced (STM_TASK 41 / STM_TSK_UI 32). */
export const MIA_CONTROL_TASK_ID = 41;
/** Seed MIA parent on Toponímia cartography GEO_ID 6 (STM_TASK 42, typeId 16). */
export const MIA_PARENT_TASK_ID = 42;
/** Seed Feature Information control — needed for identify → MIA callback path. */
export const FEATURE_INFO_TASK_ID = 8;

/**
* Catalog E2E uses the visible Topográficos branch (Ortofotos is filtered out of the
Expand Down
Loading
Loading