Skip to content

Commit

Permalink
feat: Nähtävilläolokuulutus-lomakkeen hyväksymisprosessi (#271)
Browse files Browse the repository at this point in the history
* feat: Nähtävilläolokuulutus-lomakkeen hyväksymisprosessi

* muutokset katselmointikommenttien perusteella
  • Loading branch information
haapamakim authored Jun 16, 2022
1 parent 325b8d9 commit 2453904
Show file tree
Hide file tree
Showing 23 changed files with 868 additions and 297 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ import * as sinon from "sinon";
import { projektiDatabase } from "../../src/database/projektiDatabase";
import { ProjektiFixture } from "../../test/fixture/projektiFixture";
import { TilasiirtymaToiminto, TilasiirtymaTyyppi } from "../../../common/graphql/apiModel";
import { aloitusKuulutusHandler } from "../../src/handler/aloitusKuulutusHandler";
import { UserFixture } from "../../test/fixture/userFixture";
import { userService } from "../../src/user";
import { personSearchUpdaterClient } from "../../src/personSearch/personSearchUpdaterClient";
import * as personSearchUpdaterHandler from "../../src/personSearch/lambda/personSearchUpdaterHandler";
import { aloitusKuulutusTilaManager } from "../../src/handler/tila/aloitusKuulutusTilaManager";

const { expect } = require("chai");

Expand Down Expand Up @@ -50,15 +50,15 @@ describe("AloitusKuulutus", () => {
await projektiDatabase.createProjekti(projekti);
await takeSnapshot(oid);

await aloitusKuulutusHandler.siirraTila({
await aloitusKuulutusTilaManager.siirraTila({
oid,
toiminto: TilasiirtymaToiminto.LAHETA_HYVAKSYTTAVAKSI,
tyyppi: TilasiirtymaTyyppi.ALOITUSKUULUTUS,
});
await takeSnapshot(oid);

userFixture.loginAs(UserFixture.pekkaProjari);
await aloitusKuulutusHandler.siirraTila({
await aloitusKuulutusTilaManager.siirraTila({
oid,
toiminto: TilasiirtymaToiminto.HYLKAA,
syy: "Korjaa teksti",
Expand All @@ -67,15 +67,15 @@ describe("AloitusKuulutus", () => {
await takeSnapshot(oid);

userFixture.loginAs(UserFixture.mattiMeikalainen);
await aloitusKuulutusHandler.siirraTila({
await aloitusKuulutusTilaManager.siirraTila({
oid,
toiminto: TilasiirtymaToiminto.LAHETA_HYVAKSYTTAVAKSI,
tyyppi: TilasiirtymaTyyppi.ALOITUSKUULUTUS,
});
await takeSnapshot(oid);

userFixture.loginAs(UserFixture.pekkaProjari);
await aloitusKuulutusHandler.siirraTila({
await aloitusKuulutusTilaManager.siirraTila({
oid,
toiminto: TilasiirtymaToiminto.HYVAKSY,
tyyppi: TilasiirtymaTyyppi.ALOITUSKUULUTUS,
Expand Down
197 changes: 197 additions & 0 deletions backend/integrationtest/api/__snapshots__/api.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -2005,6 +2005,203 @@ Object {
],
"lisaAineisto": undefined,
"muistutusoikeusPaattyyPaiva": "2042-06-08",
"nahtavillaoloPDFt": undefined,
},
}
`;

exports[`Api should search, load and save a project 21`] = `
Object {
"description": "testNahtavillaOloAfterApproval",
"obj": Object {
"nahtavillaoloVaihe": Object {
"__typename": "NahtavillaoloVaihe",
"aineistoNahtavilla": undefined,
"hankkeenKuvaus": Object {
"SAAME": "Saameksi nahtavillaoloVaihe",
"SUOMI": "Lorem Ipsum nahtavillaoloVaihe",
"__typename": "HankkeenKuvaukset",
},
"ilmoituksenVastaanottajat": Object {
"__typename": "IlmoituksenVastaanottajat",
"kunnat": Array [
Object {
"__typename": "KuntaVastaanottaja",
"lahetetty": "2022-03-11T14:54",
"nimi": "Mikkeli",
"sahkoposti": "mikkeli@mikke.li",
},
Object {
"__typename": "KuntaVastaanottaja",
"lahetetty": "2022-03-11T14:54",
"nimi": " Juva",
"sahkoposti": "juva@ju.va",
},
Object {
"__typename": "KuntaVastaanottaja",
"lahetetty": "2022-03-11T14:54",
"nimi": " Savonlinna",
"sahkoposti": "savonlinna@savonlin.na",
},
],
"viranomaiset": Array [
Object {
"__typename": "ViranomaisVastaanottaja",
"lahetetty": "2022-03-11T14:54",
"nimi": "ETELA_SAVO_ELY",
"sahkoposti": "kirjaamo.etela-savo@ely-keskus.fi",
},
],
},
"kuulutusPaiva": "2022-06-07",
"kuulutusVaihePaattyyPaiva": "2042-06-07",
"kuulutusYhteysHenkilot": Array [
"A000112",
],
"kuulutusYhteystiedot": Array [
Object {
"__typename": "Yhteystieto",
"etunimi": "Etunimi",
"organisaatio": "",
"puhelinnumero": "0293121213",
"sahkoposti": "Etunimi.Sukunimi@vayla.fi",
"sukunimi": "Sukunimi",
"titteli": "Projektipäällikkö",
},
Object {
"__typename": "Yhteystieto",
"etunimi": "Joku",
"organisaatio": "",
"puhelinnumero": "02998765",
"sahkoposti": "Joku.Jokunen@vayla.fi",
"sukunimi": "Jokunen",
"titteli": "Konsultti",
},
],
"lisaAineisto": undefined,
"muistutusoikeusPaattyyPaiva": "2042-06-08",
"nahtavillaoloPDFt": undefined,
},
"nahtavillaoloVaiheJulkaisut": Array [
Object {
"__typename": "NahtavillaoloVaiheJulkaisu",
"aineistoNahtavilla": undefined,
"hankkeenKuvaus": Object {
"SAAME": "Saameksi nahtavillaoloVaihe",
"SUOMI": "Lorem Ipsum nahtavillaoloVaihe",
"__typename": "HankkeenKuvaukset",
},
"hyvaksyja": "A000112",
"id": 2,
"ilmoituksenVastaanottajat": Object {
"__typename": "IlmoituksenVastaanottajat",
"kunnat": Array [
Object {
"__typename": "KuntaVastaanottaja",
"lahetetty": "2022-03-11T14:54",
"nimi": "Mikkeli",
"sahkoposti": "mikkeli@mikke.li",
},
Object {
"__typename": "KuntaVastaanottaja",
"lahetetty": "2022-03-11T14:54",
"nimi": " Juva",
"sahkoposti": "juva@ju.va",
},
Object {
"__typename": "KuntaVastaanottaja",
"lahetetty": "2022-03-11T14:54",
"nimi": " Savonlinna",
"sahkoposti": "savonlinna@savonlin.na",
},
],
"viranomaiset": Array [
Object {
"__typename": "ViranomaisVastaanottaja",
"lahetetty": "2022-03-11T14:54",
"nimi": "ETELA_SAVO_ELY",
"sahkoposti": "kirjaamo.etela-savo@ely-keskus.fi",
},
],
},
"kielitiedot": Object {
"__typename": "Kielitiedot",
"ensisijainenKieli": "SUOMI",
},
"kuulutusPaiva": "2022-06-07",
"kuulutusVaihePaattyyPaiva": "2042-06-07",
"kuulutusYhteysHenkilot": Array [
"A000112",
],
"kuulutusYhteystiedot": Array [
Object {
"__typename": "Yhteystieto",
"etunimi": "Etunimi",
"organisaatio": "",
"puhelinnumero": "0293121213",
"sahkoposti": "Etunimi.Sukunimi@vayla.fi",
"sukunimi": "Sukunimi",
"titteli": "Projektipäällikkö",
},
Object {
"__typename": "Yhteystieto",
"etunimi": "Joku",
"organisaatio": "",
"puhelinnumero": "02998765",
"sahkoposti": "Joku.Jokunen@vayla.fi",
"sukunimi": "Jokunen",
"titteli": "Konsultti",
},
],
"lisaAineisto": undefined,
"muistutusoikeusPaattyyPaiva": "2042-06-08",
"muokkaaja": "A000112",
"nahtavillaoloPDFt": undefined,
"tila": "HYVAKSYTTY",
},
],
},
}
`;

exports[`Api should search, load and save a project 22`] = `
Object {
"description": "publicProjektiNahtavillaOloJulkinenAfterApproval",
"obj": Array [
Object {
"__typename": "NahtavillaoloVaiheJulkaisuJulkinen",
"hankkeenKuvaus": Object {
"SAAME": "Saameksi nahtavillaoloVaihe",
"SUOMI": "Lorem Ipsum nahtavillaoloVaihe",
"__typename": "HankkeenKuvaukset",
},
"kuulutusPaiva": "2022-06-07",
"kuulutusVaihePaattyyPaiva": "2042-06-07",
"kuulutusYhteysHenkilot": Array [
"0",
],
"kuulutusYhteystiedot": Array [
Object {
"__typename": "Yhteystieto",
"etunimi": "Etunimi",
"organisaatio": "",
"puhelinnumero": "0293121213",
"sahkoposti": "Etunimi.Sukunimi@vayla.fi",
"sukunimi": "Sukunimi",
"titteli": "Projektipäällikkö",
},
Object {
"__typename": "Yhteystieto",
"etunimi": "Joku",
"organisaatio": "",
"puhelinnumero": "02998765",
"sahkoposti": "Joku.Jokunen@vayla.fi",
"sukunimi": "Jokunen",
"titteli": "Konsultti",
},
],
"muistutusoikeusPaattyyPaiva": "2042-06-08",
},
],
}
`;
3 changes: 2 additions & 1 deletion backend/integrationtest/api/api.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ import {
verifyEmailsSent,
} from "./testUtil/tests";
import { takeS3Snapshot } from "./testUtil/util";
import { testNahtavillaOlo } from "./testUtil/nahtavillaolo";
import { testNahtavillaOlo, testNahtavillaOloApproval } from "./testUtil/nahtavillaolo";

const sandbox = sinon.createSandbox();
const { expect } = require("chai");
Expand Down Expand Up @@ -134,6 +134,7 @@ describe("Api", () => {

userFixture.loginAs(UserFixture.mattiMeikalainen);
await testNahtavillaOlo(oid, projektiPaallikko.kayttajatunnus);
await testNahtavillaOloApproval(oid, projektiPaallikko, userFixture);
});

it.skip("should archive projekti", async function () {
Expand Down
45 changes: 43 additions & 2 deletions backend/integrationtest/api/testUtil/nahtavillaolo.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
import { api } from "../apiClient";
import { apiTestFixture } from "../apiTestFixture";
import { Status } from "../../../../common/graphql/apiModel";
import {
NahtavillaoloVaiheTila,
ProjektiKayttaja,
Status,
TilasiirtymaToiminto,
TilasiirtymaTyyppi,
} from "../../../../common/graphql/apiModel";
import { expectToMatchSnapshot } from "./util";
import { loadProjektiFromDatabase } from "./tests";
import { loadProjektiFromDatabase, testPublicAccessToProjekti } from "./tests";
import { UserFixture } from "../../../test/fixture/userFixture";

const { expect } = require("chai");

export async function testNahtavillaOlo(oid: string, projektiPaallikko: string): Promise<void> {
await api.tallennaProjekti({
Expand All @@ -12,3 +21,35 @@ export async function testNahtavillaOlo(oid: string, projektiPaallikko: string):
const projekti = await loadProjektiFromDatabase(oid, Status.NAHTAVILLAOLO);
expectToMatchSnapshot("testNahtavillaOloPerustiedot", projekti.nahtavillaoloVaihe);
}

export async function testNahtavillaOloApproval(
oid: string,
projektiPaallikko: ProjektiKayttaja,
userFixture: UserFixture
): Promise<void> {
userFixture.loginAsProjektiKayttaja(projektiPaallikko);
await api.siirraTila({
oid,
tyyppi: TilasiirtymaTyyppi.NAHTAVILLAOLO,
toiminto: TilasiirtymaToiminto.LAHETA_HYVAKSYTTAVAKSI,
});

const projektiHyvaksyttavaksi = await loadProjektiFromDatabase(oid, Status.NAHTAVILLAOLO);
expect(projektiHyvaksyttavaksi.nahtavillaoloVaiheJulkaisut).to.have.length(1);
expect(projektiHyvaksyttavaksi.nahtavillaoloVaiheJulkaisut[0].tila).to.eq(NahtavillaoloVaiheTila.ODOTTAA_HYVAKSYNTAA);

await api.siirraTila({ oid, tyyppi: TilasiirtymaTyyppi.NAHTAVILLAOLO, toiminto: TilasiirtymaToiminto.HYVAKSY });
const projekti = await loadProjektiFromDatabase(oid, Status.NAHTAVILLAOLO);
expectToMatchSnapshot("testNahtavillaOloAfterApproval", {
nahtavillaoloVaihe: projekti.nahtavillaoloVaihe,
nahtavillaoloVaiheJulkaisut: projekti.nahtavillaoloVaiheJulkaisut,
});

await testPublicAccessToProjekti(
oid,
Status.NAHTAVILLAOLO,
userFixture,
"NahtavillaOloJulkinenAfterApproval",
(projektiJulkinen) => projektiJulkinen.nahtavillaoloVaiheJulkaisut
);
}
26 changes: 22 additions & 4 deletions backend/integrationtest/api/testUtil/tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {
AsiakirjaTyyppi,
Kieli,
Projekti,
ProjektiJulkinen,
ProjektiKayttaja,
ProjektiKayttajaInput,
ProjektiRooli,
Expand Down Expand Up @@ -51,6 +52,17 @@ export async function loadProjektiFromDatabase(oid: string, expectedStatus?: Sta
return savedProjekti;
}

export async function loadProjektiJulkinenFromDatabase(
oid: string,
expectedStatus?: Status
): Promise<ProjektiJulkinen> {
const savedProjekti = await api.lataaProjektiJulkinen(oid);
if (expectedStatus) {
expect(savedProjekti.status).to.be.eq(expectedStatus);
}
return savedProjekti;
}

export async function testProjektiHenkilot(projekti: Projekti, oid: string): Promise<ProjektiKayttaja> {
await api.tallennaProjekti({
oid,
Expand Down Expand Up @@ -365,19 +377,25 @@ export async function julkaiseVuorovaikutus(oid: string, userFixture: UserFixtur
userFixture.logout();
const suunnitteluVaihe = (await loadProjektiFromDatabase(oid, Status.SUUNNITTELU)).suunnitteluVaihe;
cleanupVuorovaikutusTimestamps(suunnitteluVaihe.vuorovaikutukset);
await expectToMatchSnapshot("publicProjekti" + (" suunnitteluvaihe" || ""), suunnitteluVaihe);
expectToMatchSnapshot("publicProjekti" + (" suunnitteluvaihe" || ""), suunnitteluVaihe);
}

export async function testPublicAccessToProjekti(
oid: string,
expectedStatus: Status,
userFixture: UserFixture,
description?: string
description?: string,
projektiDataExtractor?: (projekti: ProjektiJulkinen) => unknown
): Promise<void> {
userFixture.logout();
const publicProjekti = await loadProjektiFromDatabase(oid, expectedStatus);
const publicProjekti = await loadProjektiJulkinenFromDatabase(oid, expectedStatus);
publicProjekti.paivitetty = "***unit test***";
expectToMatchSnapshot("publicProjekti" + (description || ""), publicProjekti);

let actual: unknown = publicProjekti;
if (projektiDataExtractor) {
actual = projektiDataExtractor(publicProjekti);
}
expectToMatchSnapshot("publicProjekti" + (description || ""), actual);
}

export async function archiveProjekti(oid: string): Promise<void> {
Expand Down
2 changes: 1 addition & 1 deletion backend/src/apiHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ import { velhoDocumentHandler } from "./handler/velhoDocumentHandler";
import { palauteHandler } from "./palaute/palauteHandler";
import { ClientError } from "./error/ClientError";
import { SystemError } from "./error/SystemError";
import { tilaHandler } from "./handler/tilaHandler";
import { tilaHandler } from "./handler/tila/tilaHandler";

export type AppSyncEventArguments =
| unknown
Expand Down
Loading

0 comments on commit 2453904

Please sign in to comment.