Skip to content
Snippets Groups Projects
Commit 55f36d93 authored by OZGCloud's avatar OZGCloud
Browse files

Merge branch 'master' into OZG-5812-download-button-in-status-abgeschlossen

parents b4883c4a a0d234a7
Branches
Tags
No related merge requests found
Showing
with 396 additions and 14 deletions
......@@ -659,6 +659,7 @@ String generateCypressConfig(String bezeichner, String testFolder, Integer dbPor
config.env.put("search", getElasticsearchEnv(namespace))
config.env.put("userManager", getUserManagerEnv(namespace, dbPort))
config.env.put("smocker", getSmockerEnv(namespace))
writeJSON file: configName, json: config
......@@ -802,3 +803,9 @@ Map getElasticsearchSecret(String namespace) {
Boolean hasNpmDebugLog() {
return sh (script: "ls -l /root/.npm/_logs/*-debug.log", returnStatus: true) == env.SH_SUCCESS_STATUS_CODE as Integer
}
Map getSmockerEnv(String namespace) {
return [
"url": "https://${namespace}-smocker.dev.by.ozg-cloud.de".toString()
]
}
\ No newline at end of file
......@@ -15,6 +15,9 @@
"userManager": {
"dbUrl": "mongodb://localhost:27018",
"database": "usermanager"
},
"smocker": {
"url": "http://localhost:7081"
}
},
"fileServerFolder": ".",
......
......@@ -56,6 +56,13 @@ services:
- GRPC_CLIENT_INFO-MANAGER_NEGOTIATIONTYPE=PLAINTEXT
- GRPC_CLIENT_COMMAND-MANAGER_NEGOTIATIONTYPE=PLAINTEXT
- GRPC_SERVER_SECURITY_ENABLED=false
# Bescheid-Wizard
- OZGCLOUD_FEATURE_BESCHEID_ENABLE-DUMMY-DOCUMENT-PROCESSOR=false
- OZGCLOUD_BESCHEID_SMART_DOCUMENTS_URL=http://smocker:8080/smartdocuments
- OZGCLOUD_BESCHEID_SMART_DOCUMENTS_BASIC_AUTH_USERNAME=MGM
- OZGCLOUD_BESCHEID_SMART_DOCUMENTS_BASIC_AUTH_PASSWORD=MGM
- OZGCLOUD_BESCHEID_SMART_DOCUMENTS_TEMPLATE_GROUP=OzgCloudTest
- OZGCLOUD_BESCHEID_SMART_DOCUMENTS_TEMPLATE=Halteverbot
ports:
- 9091:9090
depends_on:
......@@ -87,6 +94,10 @@ services:
- LOGGING_CONFIG=classpath:log4j2-local.xml
- BPL_DEBUG_ENABLED=true
- BPL_DEBUG_PORT=5000
# bescheid-wizard
- OZGCLOUD_FEATURE_BESCHEID-WIZARD=true
- OZGCLOUD_VORGANG_BESCHEID_0_FORM_ENGINE_NAME=FormSolutions
- OZGCLOUD_VORGANG_BESCHEID_0_FORM_ID=KFAS_STAGE_KI_10_Haltverbot_LANDESHACKATHON
ports:
- 8080:8080
- 5000:5000
......
......@@ -55,8 +55,11 @@ user_manager:
use_staging_cert: true
smocker:
enabled: false
enabled: true
ingress:
enabled: true
use_staging_cert: true
mocks:
- request:
method: POST
......
......@@ -9,12 +9,23 @@ project:
alfa:
env:
overrideSpringProfiles: 'oc,e2e,dev'
ozgcloud_feature_bescheid-wizard: "true"
ingress:
use_staging_cert: true
ozgcloud:
vorgang:
bescheid:
- formEngineName: FormSolutions
formId: KFAS_STAGE_KI_10_Haltverbot_LANDESHACKATHON
vorgang_manager:
env:
overrideSpringProfiles: 'oc,e2e,dev'
ozgcloud_bescheid_smart_documents_url: http://smocker:8080/smartdocuments
ozgcloud_bescheid_smart_documents_basic_auth_username: MGM
ozgcloud_bescheid_smart_documents_basic_auth_password: MGM
ozgcloud_bescheid_smart_documents_template_group: OzgCloudTest
ozgcloud_bescheid_smart_documents_template: Halteverbot
elasticsearch:
enabled: true
replicaCount: 1
......@@ -40,7 +51,11 @@ user_manager:
use_staging_cert: true
smocker:
enabled: false
enabled: true
ingress:
enabled: true
use_staging_cert: true
mocks:
- request:
......
- request:
method: POST
path: /bspx-postkorb-okkomm-ws/bspservices/postkorbkomm
response:
staus: 200
headers:
Content-Type: text/xml
charset: UTF-8
body: >
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/><SOAP-ENV:Body><ns2:sendBspNachrichtNativeOutput xmlns:ns2="urn:akdb:bsp:postkorb:komm:webservice"><bspQuittung>&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;&lt;BspQuittung version="1.5" fassung="2020-03-15" xmlns="http://www.akdb.de/egov/bsp/nachrichten"&gt;&lt;AnnahmeErfolgreich&gt;true&lt;/AnnahmeErfolgreich&gt;&lt;ErgebnisStatus&gt;&lt;Tabelle&gt;9006&lt;/Tabelle&gt;&lt;Schluessel&gt;0&lt;/Schluessel&gt;&lt;/ErgebnisStatus&gt;&lt;ErgaenzendeHinweise&gt;Nachricht wurde angenommen&lt;/ErgaenzendeHinweise&gt;&lt;/BspQuittung&gt;</bspQuittung></ns2:sendBspNachrichtNativeOutput></SOAP-ENV:Body></SOAP-ENV:Envelope>
\ No newline at end of file
- request:
method: POST
path: /externe-processor-failure
response:
status: 500
headers:
body: 'Da ist etwas schiefgelaufen'
\ No newline at end of file
- request:
method: POST
path: /externe-processor-success
response:
status: 200
headers:
Content-Type: application/json
body: >
{
"action": "CREATE_AKTENNOTIZ",
"body": {
"headline": "Eine neue Notiz",
"severity": "INFO",
"text": "Alles fein"
}
}
\ No newline at end of file
This diff is collapsed.
/*
* Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
export enum SmockerMocks {
BAYERNID_MOCK = 'bayernid-mock.yaml',
EXTERNE_PROCESSOR_FAILURE_MOCK = 'externe-processor-failure-mock.yaml',
EXTERNE_PROCESSOR_SUCCESS_MOCK = 'externe-processor-success-mock.yaml',
SMARTDOCUMENT_MOCK = 'smartdocument-mock.yaml',
}
\ No newline at end of file
......@@ -48,6 +48,7 @@ enum CypressEnv {
KEYCLOAK_REALM = 'keycloakRealm',
KEYCLOAK_URL = 'keycloakUrl',
SEARCH = 'search',
SMOCKER = 'smocker',
}
const CONTENT_TYPE_HEADER_VALUE: string = 'application/x-www-form-urlencoded';
......@@ -80,6 +81,8 @@ declare namespace Cypress {
getUserInfo();
addVorgangToSearchIndex(vorgang);
removeAllDocumentsFromSearchIndex();
addMockToSmocker(mock);
resetSmocker();
}
}
......@@ -239,3 +242,32 @@ function buildSearchIndexRemoveAllBody(): any {
},
};
}
Cypress.Commands.add('addMockToSmocker', (mock) => {
cy.fixture(`smocker/${mock}`).then((mockFile) => {
cy.request({
method: HttpMethod.POST,
url: `${getSmockerUrl()}/mocks`,
body: mockFile,
headers: {
"Content-Type": "application/x-yaml"
}
});
});
});
Cypress.Commands.add('resetSmocker', () => {
cy.request({
method: HttpMethod.POST,
url: `${getSmockerUrl()}/reset`,
});
});
function getSmockerUrl(): string {
const smockerEnv: string = getSmockerEnv();
return smockerEnv['url'];
}
function getSmockerEnv(): string {
return Cypress.env(CypressEnv.SMOCKER);
}
\ No newline at end of file
......@@ -24,6 +24,7 @@
import { Interception, RouteHandler, RouteMatcher } from 'cypress/types/net-stubbing';
import { GridFsChunkE2E, GridFsFileDataE2E, GridFsFileE2E } from '../model/binary-file';
import { CommandE2E } from '../model/command';
import { SmockerMocks } from '../model/smocker';
import { UsermanagerUserE2E } from '../model/usermanager';
import { VorgangE2E } from '../model/vorgang';
import { VorgangAttachedItemE2E } from '../model/vorgang-attached-item';
......@@ -194,3 +195,11 @@ export function getBaseUrl(): string {
export function getCypressEnv(value: string) {
return Cypress.env(value);
}
export function addSmockerMock(mock: SmockerMocks): void {
cy.addMockToSmocker(mock);
}
export function resetSmocker(): void {
cy.resetSmocker();
}
\ No newline at end of file
import { moduleMetadata, type Meta, type StoryObj } from '@storybook/angular';
import { AttachmentComponent } from '../attachment/attachment.component';
import { AttachmentContainerComponent } from './attachment-container.component';
const meta: Meta<AttachmentContainerComponent> = {
title: 'Containers/Attachment container',
component: AttachmentContainerComponent,
parameters: {
docs: {
description: {
component: 'Container for multiple attachments',
},
},
},
decorators: [
moduleMetadata({
imports: [AttachmentContainerComponent, AttachmentComponent],
}),
],
excludeStories: /.*Data$/,
tags: ['autodocs'],
};
export default meta;
type Story = StoryObj<AttachmentContainerComponent>;
export const Default: Story = {
render: () => ({
template: `<ods-attachment-container>
<ods-attachment caption="Attachment" description="200 kB" fileType="pdf"></ods-attachment>
<ods-attachment caption="Second attachment" description="432 kB" fileType="doc"></ods-attachment>
</ods-attachment-container>`,
}),
};
......@@ -12,6 +12,8 @@ import { SpinnerIconComponent } from '../icons/spinner-icon/spinner-icon.compone
styles: [':host {@apply flex}'],
template: `<button
class="relative flex w-full items-start gap-3 border-b border-b-grayborder bg-background-100 px-3 py-2 hover:bg-background-200"
[disabled]="isLoading"
[attr.aria-disabled]="isLoading"
>
<div class="flex-shrink">
<ods-file-icon
......
......@@ -15,19 +15,37 @@ export const Default: Story = {
name: 'File with pdf icon',
args: {
caption: 'Katzenanmeldung_1231231_eingang.pdf',
errorCaption: 'Error!',
loadingCaption: 'Loading...',
description: '450 kB',
fileType: 'pdf',
isLoading: false,
errorMessages: [],
},
argTypes: {
caption: {
table: {
type: { summary: 'Name of the document or title' },
description: 'Name of the document',
},
errorCaption: {
description: 'Error text appears when eror messages array is not empty',
},
loadingCaption: {
description: 'Loading text appears when isLoading flag is true',
},
description: {
description: 'Description can contain size of file or e.g. loading progress',
},
fileType: {
description: 'Type of file icon',
},
isLoading: {
description: 'Boolean flag for loading state',
table: {
type: { summary: 'Description can contain size of file or e.g. loading progress' },
defaultValue: { summary: 'false' },
},
},
errorMessages: {
description: 'The array containing strings with errors text',
},
},
};
......@@ -44,7 +62,7 @@ export const Doc: Story = {
export const Loading: Story = {
name: 'File with loading icon',
args: {
caption: 'Katzenanmeldung_1231231_eingang.doc',
loadingCaption: 'Katzenanmeldung_1231231_eingang.doc',
description: '573 kB',
fileType: 'doc',
isLoading: true,
......@@ -54,7 +72,7 @@ export const Loading: Story = {
export const Error: Story = {
name: 'Error message in file',
args: {
caption: 'Fehler beim Hochladen',
errorCaption: 'Fehler beim Hochladen',
errorMessages: ['Erlaubte Dateiendungen: pdf, jpg, png, jpeg'],
},
};
import { moduleMetadata, type Meta, type StoryObj } from '@storybook/angular';
import { AttachmentContainerComponent } from '../attachment-container/attachment-container.component';
import { AttachmentComponent } from '../attachment/attachment.component';
import { BescheidStatusTextComponent } from '../bescheid-status-text/bescheid-status-text.component';
import { BescheidContainerComponent } from './bescheid-container.component';
const meta: Meta<BescheidContainerComponent> = {
title: 'Containers/Bescheid container',
component: BescheidContainerComponent,
parameters: {
docs: {
description: {
component: 'Container for bescheid information',
},
},
},
decorators: [
moduleMetadata({
imports: [
AttachmentComponent,
AttachmentContainerComponent,
BescheidContainerComponent,
BescheidStatusTextComponent,
],
}),
],
excludeStories: /.*Data$/,
tags: ['autodocs'],
};
export default meta;
type Story = StoryObj<BescheidContainerComponent>;
export const Default: Story = {
render: () => ({
template: `<ods-bescheid-container>
<ods-bescheid-status-text
bewilligt="true"
dateText="13.11.2024"
[hasBescheidDraft]="false"
></ods-bescheid-status-text>
<ods-attachment-container>
<ods-attachment caption="Attachment" description="200 kB" fileType="pdf"></ods-attachment>
<ods-attachment caption="Second attachment" description="432 kB" fileType="doc"></ods-attachment>
</ods-attachment-container>
</ods-bescheid-container>`,
}),
};
import { moduleMetadata, type Meta, type StoryObj } from '@storybook/angular';
import { BescheidStatusTextComponent } from './bescheid-status-text.component';
const meta: Meta<BescheidStatusTextComponent> = {
title: 'Bescheid status text',
component: BescheidStatusTextComponent,
decorators: [
moduleMetadata({
imports: [BescheidStatusTextComponent],
}),
],
excludeStories: /.*Data$/,
tags: ['autodocs'],
};
export default meta;
type Story = StoryObj<BescheidStatusTextComponent>;
export const Default: Story = {
args: { dateText: '31.12.1999', bewilligt: true, hasBescheidDraft: false },
argTypes: {
dateText: { description: 'Date of decision' },
bewilligt: { table: { defaultValue: { summary: 'false' } } },
hasBescheidDraft: { table: { defaultValue: { summary: 'false' } } },
},
};
import { argsToTemplate, moduleMetadata, type Meta, type StoryObj } from '@storybook/angular';
import { BescheidGenerateIconComponent } from '../icons/bescheid-generate-icon/bescheid-generate-icon.component';
import { ButtonCardComponent } from './button-card.component';
const meta: Meta<ButtonCardComponent> = {
title: 'Button card',
component: ButtonCardComponent,
parameters: {
docs: {
description: {
component: 'A button with two lines of text',
},
},
},
decorators: [
moduleMetadata({
imports: [ButtonCardComponent, BescheidGenerateIconComponent],
}),
],
excludeStories: /.*Data$/,
tags: ['autodocs'],
};
export default meta;
type Story = StoryObj<ButtonCardComponent>;
export const Default: Story = {
args: {
text: 'Bescheiddokument',
subText: 'automatisch erstellen',
isLoading: false,
},
argTypes: {
text: { description: 'First line of text' },
subText: { description: 'Second line of text' },
},
render: (args: ButtonCardComponent) => ({
props: args,
template: `<ods-button-card ${argsToTemplate(args)} class="w-72">
<ods-bescheid-generate-icon icon fileType="auto"></ods-bescheid-generate-icon>
</ods-button-card>`,
}),
};
......@@ -6,7 +6,6 @@ import { ButtonComponent } from './button.component';
const meta: Meta<ButtonComponent> = {
title: 'Button',
component: ButtonComponent,
subcomponents: { FileIconComponent },
decorators: [
moduleMetadata({
imports: [ButtonComponent, FileIconComponent],
......@@ -20,21 +19,36 @@ export default meta;
type Story = StoryObj<ButtonComponent>;
export const Default: Story = {
args: { text: 'Hello world!', isLoading: false, variant: 'primary' },
args: {
text: 'Hello world!',
isLoading: false,
variant: 'primary',
},
argTypes: {
variant: {
options: ['primary', 'outline'],
control: { type: 'radio' },
table: { defaultValue: { summary: 'primary' } },
},
},
};
export const WithIcon: Story = {
args: { text: 'I have an icon', isLoading: false, variant: 'outline' },
render: (args: ButtonComponent) => ({
args: {
text: 'I have an icon',
variant: 'outline',
},
render: (args) => ({
props: args,
template: `<ods-button ${argsToTemplate(args)}>
<ods-file-icon icon fileType='pdf' size='extra-large'></ods-file-icon>
<ods-file-icon icon fileType='pdf' size='small'></ods-file-icon>
</ods-button>`,
}),
};
export const IsLoading: Story = {
args: {
text: 'Loading...',
isLoading: true,
},
};
import { moduleMetadata, type Meta, type StoryObj } from '@storybook/angular';
import { ErrorMessageComponent } from './error-message.component';
const meta: Meta<ErrorMessageComponent> = {
title: 'Error message',
component: ErrorMessageComponent,
decorators: [
moduleMetadata({
imports: [ErrorMessageComponent],
}),
],
excludeStories: /.*Data$/,
tags: ['autodocs'],
};
export default meta;
type Story = StoryObj<ErrorMessageComponent>;
export const Default: Story = {
args: {
error: 'Text of error',
},
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment