test(m1): seed anonymised fixture corpus with hygiene scan
This commit is contained in:
parent
d0be8fba11
commit
b538b5c5f0
17 changed files with 910 additions and 0 deletions
38
tests/fixtures/listings/01-alt-passer.md
vendored
Normal file
38
tests/fixtures/listings/01-alt-passer.md
vendored
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
---
|
||||||
|
# Proveniens: syntetisk testdata for jobbsok. Ingen ekte annonse og ingen
|
||||||
|
# ekte arbeidsgiver. Organisasjonsnummeret feiler mod-11 med vilje, og
|
||||||
|
# vertsnavn og e-postdomener ligger under .example (RFC 2606).
|
||||||
|
# Datoer er relative til 2026-09-15. Delscore er registrert her slik at
|
||||||
|
# regnestykket i steg 10 kan testes uten et modellkall.
|
||||||
|
annonse_id: ann-01
|
||||||
|
arbeidsgiver: Fjordtek AS
|
||||||
|
orgnr: 812345673
|
||||||
|
rolle: Seniorraadgiver datadeling
|
||||||
|
kilde: eksempelportalen
|
||||||
|
url: https://jobb.fjordtek.example/ann-01
|
||||||
|
kontakt: rekruttering@fjordtek.example
|
||||||
|
publisert: 2026-09-08
|
||||||
|
frist: 2026-09-29
|
||||||
|
sted: Tromsø
|
||||||
|
reisetid_min: 20
|
||||||
|
hjemmekontor_dager: 3
|
||||||
|
ansettelsesform: fast
|
||||||
|
lonn_nok: 900000
|
||||||
|
senioritet: senior
|
||||||
|
turnus: nei
|
||||||
|
delscore:
|
||||||
|
fagomrade: 8
|
||||||
|
oppgavetype: 7
|
||||||
|
teknologi: 6
|
||||||
|
selskapstype: 5
|
||||||
|
sum: 26
|
||||||
|
---
|
||||||
|
|
||||||
|
## Om stillingen
|
||||||
|
|
||||||
|
Fjordtek AS soeker en seniorraadgiver datadeling i Tromsø. Arbeidsstedet er Tromsø, og
|
||||||
|
stillingen er fast.
|
||||||
|
|
||||||
|
## Hvorfor denne annonsen ligger i korpuset
|
||||||
|
|
||||||
|
Passerer alle hardfiltrene i 01-gyldig.md.
|
||||||
38
tests/fixtures/listings/02-lonn-under-gulv.md
vendored
Normal file
38
tests/fixtures/listings/02-lonn-under-gulv.md
vendored
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
---
|
||||||
|
# Proveniens: syntetisk testdata for jobbsok. Ingen ekte annonse og ingen
|
||||||
|
# ekte arbeidsgiver. Organisasjonsnummeret feiler mod-11 med vilje, og
|
||||||
|
# vertsnavn og e-postdomener ligger under .example (RFC 2606).
|
||||||
|
# Datoer er relative til 2026-09-15. Delscore er registrert her slik at
|
||||||
|
# regnestykket i steg 10 kan testes uten et modellkall.
|
||||||
|
annonse_id: ann-02
|
||||||
|
arbeidsgiver: Kystdata AS
|
||||||
|
orgnr: 912345611
|
||||||
|
rolle: Raadgiver datadeling
|
||||||
|
kilde: eksempelportalen
|
||||||
|
url: https://jobb.kystdata.example/ann-02
|
||||||
|
kontakt: rekruttering@kystdata.example
|
||||||
|
publisert: 2026-09-08
|
||||||
|
frist: 2026-09-29
|
||||||
|
sted: Bodø
|
||||||
|
reisetid_min: 25
|
||||||
|
hjemmekontor_dager: 2
|
||||||
|
ansettelsesform: fast
|
||||||
|
lonn_nok: 700000
|
||||||
|
senioritet: senior
|
||||||
|
turnus: nei
|
||||||
|
delscore:
|
||||||
|
fagomrade: 8
|
||||||
|
oppgavetype: 7
|
||||||
|
teknologi: 6
|
||||||
|
selskapstype: 4
|
||||||
|
sum: 25
|
||||||
|
---
|
||||||
|
|
||||||
|
## Om stillingen
|
||||||
|
|
||||||
|
Kystdata AS soeker en raadgiver datadeling i Bodø. Arbeidsstedet er Bodø, og
|
||||||
|
stillingen er fast.
|
||||||
|
|
||||||
|
## Hvorfor denne annonsen ligger i korpuset
|
||||||
|
|
||||||
|
Faller paa lonn: 700000 er under gulvet paa 850000.
|
||||||
38
tests/fixtures/listings/03-for-lang-reisetid.md
vendored
Normal file
38
tests/fixtures/listings/03-for-lang-reisetid.md
vendored
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
---
|
||||||
|
# Proveniens: syntetisk testdata for jobbsok. Ingen ekte annonse og ingen
|
||||||
|
# ekte arbeidsgiver. Organisasjonsnummeret feiler mod-11 med vilje, og
|
||||||
|
# vertsnavn og e-postdomener ligger under .example (RFC 2606).
|
||||||
|
# Datoer er relative til 2026-09-15. Delscore er registrert her slik at
|
||||||
|
# regnestykket i steg 10 kan testes uten et modellkall.
|
||||||
|
annonse_id: ann-03
|
||||||
|
arbeidsgiver: Nordvik kommune
|
||||||
|
orgnr: 811099105
|
||||||
|
rolle: Fagleder arkitektur
|
||||||
|
kilde: eksempelportalen
|
||||||
|
url: https://jobb.nordvik.example/ann-03
|
||||||
|
kontakt: rekruttering@nordvik.example
|
||||||
|
publisert: 2026-09-08
|
||||||
|
frist: 2026-09-29
|
||||||
|
sted: Målselv
|
||||||
|
reisetid_min: 90
|
||||||
|
hjemmekontor_dager: 2
|
||||||
|
ansettelsesform: fast
|
||||||
|
lonn_nok: 950000
|
||||||
|
senioritet: senior
|
||||||
|
turnus: nei
|
||||||
|
delscore:
|
||||||
|
fagomrade: 7
|
||||||
|
oppgavetype: 6
|
||||||
|
teknologi: 5
|
||||||
|
selskapstype: 6
|
||||||
|
sum: 24
|
||||||
|
---
|
||||||
|
|
||||||
|
## Om stillingen
|
||||||
|
|
||||||
|
Nordvik kommune soeker en fagleder arkitektur i Målselv. Arbeidsstedet er Målselv, og
|
||||||
|
stillingen er fast.
|
||||||
|
|
||||||
|
## Hvorfor denne annonsen ligger i korpuset
|
||||||
|
|
||||||
|
Faller paa geografi: 90 minutter mot et tak paa 45.
|
||||||
38
tests/fixtures/listings/04-for-lite-hjemmekontor.md
vendored
Normal file
38
tests/fixtures/listings/04-for-lite-hjemmekontor.md
vendored
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
---
|
||||||
|
# Proveniens: syntetisk testdata for jobbsok. Ingen ekte annonse og ingen
|
||||||
|
# ekte arbeidsgiver. Organisasjonsnummeret feiler mod-11 med vilje, og
|
||||||
|
# vertsnavn og e-postdomener ligger under .example (RFC 2606).
|
||||||
|
# Datoer er relative til 2026-09-15. Delscore er registrert her slik at
|
||||||
|
# regnestykket i steg 10 kan testes uten et modellkall.
|
||||||
|
annonse_id: ann-04
|
||||||
|
arbeidsgiver: Eksempel AS
|
||||||
|
orgnr: 823456787
|
||||||
|
rolle: Losningsarkitekt
|
||||||
|
kilde: eksempelportalen
|
||||||
|
url: https://jobb.eksempel.example/ann-04
|
||||||
|
kontakt: rekruttering@eksempel.example
|
||||||
|
publisert: 2026-09-08
|
||||||
|
frist: 2026-09-29
|
||||||
|
sted: Ålesund
|
||||||
|
reisetid_min: 30
|
||||||
|
hjemmekontor_dager: 0
|
||||||
|
ansettelsesform: fast
|
||||||
|
lonn_nok: 1050000
|
||||||
|
senioritet: leder
|
||||||
|
turnus: nei
|
||||||
|
delscore:
|
||||||
|
fagomrade: 6
|
||||||
|
oppgavetype: 8
|
||||||
|
teknologi: 7
|
||||||
|
selskapstype: 5
|
||||||
|
sum: 26
|
||||||
|
---
|
||||||
|
|
||||||
|
## Om stillingen
|
||||||
|
|
||||||
|
Eksempel AS soeker en losningsarkitekt i Ålesund. Arbeidsstedet er Ålesund, og
|
||||||
|
stillingen er fast.
|
||||||
|
|
||||||
|
## Hvorfor denne annonsen ligger i korpuset
|
||||||
|
|
||||||
|
Faller paa arbeidsform: null hjemmekontordager mot et krav om to.
|
||||||
38
tests/fixtures/listings/05-avvist-ansettelsesform.md
vendored
Normal file
38
tests/fixtures/listings/05-avvist-ansettelsesform.md
vendored
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
---
|
||||||
|
# Proveniens: syntetisk testdata for jobbsok. Ingen ekte annonse og ingen
|
||||||
|
# ekte arbeidsgiver. Organisasjonsnummeret feiler mod-11 med vilje, og
|
||||||
|
# vertsnavn og e-postdomener ligger under .example (RFC 2606).
|
||||||
|
# Datoer er relative til 2026-09-15. Delscore er registrert her slik at
|
||||||
|
# regnestykket i steg 10 kan testes uten et modellkall.
|
||||||
|
annonse_id: ann-05
|
||||||
|
arbeidsgiver: Fjordtek AS
|
||||||
|
orgnr: 812345673
|
||||||
|
rolle: Seniorraadgiver, vikariat
|
||||||
|
kilde: eksempelportalen
|
||||||
|
url: https://jobb.fjordtek.example/ann-05
|
||||||
|
kontakt: rekruttering@fjordtek.example
|
||||||
|
publisert: 2026-09-08
|
||||||
|
frist: 2026-09-29
|
||||||
|
sted: Bergen
|
||||||
|
reisetid_min: 15
|
||||||
|
hjemmekontor_dager: 3
|
||||||
|
ansettelsesform: vikariat
|
||||||
|
lonn_nok: 780000
|
||||||
|
senioritet: senior
|
||||||
|
turnus: nei
|
||||||
|
delscore:
|
||||||
|
fagomrade: 8
|
||||||
|
oppgavetype: 6
|
||||||
|
teknologi: 6
|
||||||
|
selskapstype: 5
|
||||||
|
sum: 25
|
||||||
|
---
|
||||||
|
|
||||||
|
## Om stillingen
|
||||||
|
|
||||||
|
Fjordtek AS soeker en seniorraadgiver, vikariat i Bergen. Arbeidsstedet er Bergen, og
|
||||||
|
stillingen er vikariat.
|
||||||
|
|
||||||
|
## Hvorfor denne annonsen ligger i korpuset
|
||||||
|
|
||||||
|
Faller paa ansettelsesform: vikariat staar paa avviser-lista.
|
||||||
38
tests/fixtures/listings/06-treffer-absolutt-nei.md
vendored
Normal file
38
tests/fixtures/listings/06-treffer-absolutt-nei.md
vendored
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
---
|
||||||
|
# Proveniens: syntetisk testdata for jobbsok. Ingen ekte annonse og ingen
|
||||||
|
# ekte arbeidsgiver. Organisasjonsnummeret feiler mod-11 med vilje, og
|
||||||
|
# vertsnavn og e-postdomener ligger under .example (RFC 2606).
|
||||||
|
# Datoer er relative til 2026-09-15. Delscore er registrert her slik at
|
||||||
|
# regnestykket i steg 10 kan testes uten et modellkall.
|
||||||
|
annonse_id: ann-06
|
||||||
|
arbeidsgiver: Kystdata AS
|
||||||
|
orgnr: 912345611
|
||||||
|
rolle: Driftsleder vaktsentral
|
||||||
|
kilde: eksempelportalen
|
||||||
|
url: https://jobb.kystdata.example/ann-06
|
||||||
|
kontakt: rekruttering@kystdata.example
|
||||||
|
publisert: 2026-09-08
|
||||||
|
frist: 2026-09-29
|
||||||
|
sted: Trondheim
|
||||||
|
reisetid_min: 20
|
||||||
|
hjemmekontor_dager: 1
|
||||||
|
ansettelsesform: fast
|
||||||
|
lonn_nok: 860000
|
||||||
|
senioritet: senior
|
||||||
|
turnus: ja
|
||||||
|
delscore:
|
||||||
|
fagomrade: 5
|
||||||
|
oppgavetype: 3
|
||||||
|
teknologi: 4
|
||||||
|
selskapstype: 4
|
||||||
|
sum: 16
|
||||||
|
---
|
||||||
|
|
||||||
|
## Om stillingen
|
||||||
|
|
||||||
|
Kystdata AS soeker en driftsleder vaktsentral i Trondheim. Arbeidsstedet er Trondheim, og
|
||||||
|
stillingen er fast.
|
||||||
|
|
||||||
|
## Hvorfor denne annonsen ligger i korpuset
|
||||||
|
|
||||||
|
Faller paa absolutte_nei: turnus.
|
||||||
38
tests/fixtures/listings/07-for-lav-senioritet.md
vendored
Normal file
38
tests/fixtures/listings/07-for-lav-senioritet.md
vendored
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
---
|
||||||
|
# Proveniens: syntetisk testdata for jobbsok. Ingen ekte annonse og ingen
|
||||||
|
# ekte arbeidsgiver. Organisasjonsnummeret feiler mod-11 med vilje, og
|
||||||
|
# vertsnavn og e-postdomener ligger under .example (RFC 2606).
|
||||||
|
# Datoer er relative til 2026-09-15. Delscore er registrert her slik at
|
||||||
|
# regnestykket i steg 10 kan testes uten et modellkall.
|
||||||
|
annonse_id: ann-07
|
||||||
|
arbeidsgiver: Nordvik kommune
|
||||||
|
orgnr: 811099105
|
||||||
|
rolle: Raadgiver, nyutdannet
|
||||||
|
kilde: eksempelportalen
|
||||||
|
url: https://jobb.nordvik.example/ann-07
|
||||||
|
kontakt: rekruttering@nordvik.example
|
||||||
|
publisert: 2026-09-08
|
||||||
|
frist: 2026-09-29
|
||||||
|
sted: Kirkenes
|
||||||
|
reisetid_min: 35
|
||||||
|
hjemmekontor_dager: 2
|
||||||
|
ansettelsesform: fast
|
||||||
|
lonn_nok: 660000
|
||||||
|
senioritet: junior
|
||||||
|
turnus: nei
|
||||||
|
delscore:
|
||||||
|
fagomrade: 6
|
||||||
|
oppgavetype: 5
|
||||||
|
teknologi: 5
|
||||||
|
selskapstype: 4
|
||||||
|
sum: 20
|
||||||
|
---
|
||||||
|
|
||||||
|
## Om stillingen
|
||||||
|
|
||||||
|
Nordvik kommune soeker en raadgiver, nyutdannet i Kirkenes. Arbeidsstedet er Kirkenes, og
|
||||||
|
stillingen er fast.
|
||||||
|
|
||||||
|
## Hvorfor denne annonsen ligger i korpuset
|
||||||
|
|
||||||
|
Faller paa senioritet: junior mot et gulv paa senior.
|
||||||
37
tests/fixtures/listings/08-lonn-ikke-oppgitt.md
vendored
Normal file
37
tests/fixtures/listings/08-lonn-ikke-oppgitt.md
vendored
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
---
|
||||||
|
# Proveniens: syntetisk testdata for jobbsok. Ingen ekte annonse og ingen
|
||||||
|
# ekte arbeidsgiver. Organisasjonsnummeret feiler mod-11 med vilje, og
|
||||||
|
# vertsnavn og e-postdomener ligger under .example (RFC 2606).
|
||||||
|
# Datoer er relative til 2026-09-15. Delscore er registrert her slik at
|
||||||
|
# regnestykket i steg 10 kan testes uten et modellkall.
|
||||||
|
annonse_id: ann-08
|
||||||
|
arbeidsgiver: Eksempel AS
|
||||||
|
orgnr: 823456787
|
||||||
|
rolle: Fagansvarlig datadeling
|
||||||
|
kilde: eksempelportalen
|
||||||
|
url: https://jobb.eksempel.example/ann-08
|
||||||
|
kontakt: rekruttering@eksempel.example
|
||||||
|
publisert: 2026-09-08
|
||||||
|
frist: 2026-09-29
|
||||||
|
sted: Stavanger
|
||||||
|
reisetid_min: 25
|
||||||
|
hjemmekontor_dager: 3
|
||||||
|
ansettelsesform: fast
|
||||||
|
senioritet: senior
|
||||||
|
turnus: nei
|
||||||
|
delscore:
|
||||||
|
fagomrade: 7
|
||||||
|
oppgavetype: 7
|
||||||
|
teknologi: 6
|
||||||
|
selskapstype: 5
|
||||||
|
sum: 25
|
||||||
|
---
|
||||||
|
|
||||||
|
## Om stillingen
|
||||||
|
|
||||||
|
Eksempel AS soeker en fagansvarlig datadeling i Stavanger. Arbeidsstedet er Stavanger, og
|
||||||
|
stillingen er fast.
|
||||||
|
|
||||||
|
## Hvorfor denne annonsen ligger i korpuset
|
||||||
|
|
||||||
|
Lonn er ikke oppgitt. Ukjent er ikke det samme som under gulvet, og hardfilteret skal ikke behandle det som et avslag.
|
||||||
58
tests/fixtures/profiles/01-gyldig.md
vendored
Normal file
58
tests/fixtures/profiles/01-gyldig.md
vendored
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
---
|
||||||
|
# Proveniens: syntetisk testdata for jobbsok. Ingen ekte person, ingen ekte
|
||||||
|
# arbeidsgiver, ingen ekte annonse. Organisasjonsnumre er konstruert slik at
|
||||||
|
# de FEILER mod-11-kontrollen. Alle datoer er relative til 2026-09-15.
|
||||||
|
oppdatert: 2026-09-15
|
||||||
|
geografi:
|
||||||
|
base: Tromsø
|
||||||
|
maks_reisetid_min: 45
|
||||||
|
hjemmekontor_min_dager: 2
|
||||||
|
vurderer_flytting: nei
|
||||||
|
lonn:
|
||||||
|
gulv_nok: 850000
|
||||||
|
onsket_nok: 950000
|
||||||
|
kommentar: fast stilling, ikke konsulentpaaslag
|
||||||
|
ansettelsesform:
|
||||||
|
aksepterer: fast
|
||||||
|
avviser: vikariat
|
||||||
|
absolutte_nei:
|
||||||
|
- turnus
|
||||||
|
- rendyrket salg
|
||||||
|
senioritet:
|
||||||
|
min: senior
|
||||||
|
maks: leder
|
||||||
|
---
|
||||||
|
|
||||||
|
## Kjerne
|
||||||
|
|
||||||
|
Raadgiver som faar datadeling til aa skje i praksis.
|
||||||
|
|
||||||
|
## Kompetanse
|
||||||
|
|
||||||
|
Dybde: datadeling i offentlig sektor -- ledet innfoeringen av et felles
|
||||||
|
API-register (belegg: Signaturprosjekt 1). Bredde: innkjoep, arkitektur.
|
||||||
|
Under oppbygging: maskinlaering i drift.
|
||||||
|
|
||||||
|
## Retning
|
||||||
|
|
||||||
|
Mot: fagansvar med reell beslutningsmyndighet. Bort fra: rene bestillerroller.
|
||||||
|
|
||||||
|
## Signaturprosjekter
|
||||||
|
|
||||||
|
Situasjon: fire etater delte ikke data. Bidrag: felles register og avtaleverk.
|
||||||
|
Maalbart utfall: 11 av 14 tjenester tok det i bruk paa ett aar. Dekker krav om
|
||||||
|
arkitektur og gjennomfoering.
|
||||||
|
|
||||||
|
## Kjente svakheter
|
||||||
|
|
||||||
|
| svakhet | kompensasjon | tiltak |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| lite linjeledelse | prosjektledelse i stor skala | soeker teamlead-ansvar |
|
||||||
|
|
||||||
|
## Formuleringer som virker
|
||||||
|
|
||||||
|
"Jeg tar ansvar for at det faktisk tas i bruk, ikke bare leveres."
|
||||||
|
|
||||||
|
## Profilgap
|
||||||
|
|
||||||
|
Mangler erfaring med anskaffelser over EOES-terskel.
|
||||||
57
tests/fixtures/profiles/02-mangler-lonnsgulv.md
vendored
Normal file
57
tests/fixtures/profiles/02-mangler-lonnsgulv.md
vendored
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
---
|
||||||
|
# Proveniens: syntetisk testdata for jobbsok. Ingen ekte person, ingen ekte
|
||||||
|
# arbeidsgiver, ingen ekte annonse. Organisasjonsnumre er konstruert slik at
|
||||||
|
# de FEILER mod-11-kontrollen. Alle datoer er relative til 2026-09-15.
|
||||||
|
oppdatert: 2026-09-15
|
||||||
|
geografi:
|
||||||
|
base: Tromsø
|
||||||
|
maks_reisetid_min: 45
|
||||||
|
hjemmekontor_min_dager: 2
|
||||||
|
vurderer_flytting: nei
|
||||||
|
lonn:
|
||||||
|
onsket_nok: 950000
|
||||||
|
kommentar: aapen for diskusjon
|
||||||
|
ansettelsesform:
|
||||||
|
aksepterer: fast
|
||||||
|
avviser: vikariat
|
||||||
|
absolutte_nei:
|
||||||
|
- turnus
|
||||||
|
- rendyrket salg
|
||||||
|
senioritet:
|
||||||
|
min: senior
|
||||||
|
maks: leder
|
||||||
|
---
|
||||||
|
|
||||||
|
## Kjerne
|
||||||
|
|
||||||
|
Samme profil, men uten et gulv aa filtrere paa.
|
||||||
|
|
||||||
|
## Kompetanse
|
||||||
|
|
||||||
|
Dybde: datadeling i offentlig sektor -- ledet innfoeringen av et felles
|
||||||
|
API-register (belegg: Signaturprosjekt 1). Bredde: innkjoep, arkitektur.
|
||||||
|
Under oppbygging: maskinlaering i drift.
|
||||||
|
|
||||||
|
## Retning
|
||||||
|
|
||||||
|
Mot: fagansvar med reell beslutningsmyndighet. Bort fra: rene bestillerroller.
|
||||||
|
|
||||||
|
## Signaturprosjekter
|
||||||
|
|
||||||
|
Situasjon: fire etater delte ikke data. Bidrag: felles register og avtaleverk.
|
||||||
|
Maalbart utfall: 11 av 14 tjenester tok det i bruk paa ett aar. Dekker krav om
|
||||||
|
arkitektur og gjennomfoering.
|
||||||
|
|
||||||
|
## Kjente svakheter
|
||||||
|
|
||||||
|
| svakhet | kompensasjon | tiltak |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| lite linjeledelse | prosjektledelse i stor skala | soeker teamlead-ansvar |
|
||||||
|
|
||||||
|
## Formuleringer som virker
|
||||||
|
|
||||||
|
"Jeg tar ansvar for at det faktisk tas i bruk, ikke bare leveres."
|
||||||
|
|
||||||
|
## Profilgap
|
||||||
|
|
||||||
|
Mangler erfaring med anskaffelser over EOES-terskel.
|
||||||
53
tests/fixtures/profiles/03-mangler-geografi.md
vendored
Normal file
53
tests/fixtures/profiles/03-mangler-geografi.md
vendored
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
---
|
||||||
|
# Proveniens: syntetisk testdata for jobbsok. Ingen ekte person, ingen ekte
|
||||||
|
# arbeidsgiver, ingen ekte annonse. Organisasjonsnumre er konstruert slik at
|
||||||
|
# de FEILER mod-11-kontrollen. Alle datoer er relative til 2026-09-15.
|
||||||
|
oppdatert: 2026-09-15
|
||||||
|
lonn:
|
||||||
|
gulv_nok: 850000
|
||||||
|
onsket_nok: 950000
|
||||||
|
kommentar: fast stilling, ikke konsulentpaaslag
|
||||||
|
ansettelsesform:
|
||||||
|
aksepterer: fast
|
||||||
|
avviser: vikariat
|
||||||
|
absolutte_nei:
|
||||||
|
- turnus
|
||||||
|
- rendyrket salg
|
||||||
|
senioritet:
|
||||||
|
min: senior
|
||||||
|
maks: leder
|
||||||
|
---
|
||||||
|
|
||||||
|
## Kjerne
|
||||||
|
|
||||||
|
Profil uten geografiblokk; reisetid kan ikke hardfiltreres.
|
||||||
|
|
||||||
|
## Kompetanse
|
||||||
|
|
||||||
|
Dybde: datadeling i offentlig sektor -- ledet innfoeringen av et felles
|
||||||
|
API-register (belegg: Signaturprosjekt 1). Bredde: innkjoep, arkitektur.
|
||||||
|
Under oppbygging: maskinlaering i drift.
|
||||||
|
|
||||||
|
## Retning
|
||||||
|
|
||||||
|
Mot: fagansvar med reell beslutningsmyndighet. Bort fra: rene bestillerroller.
|
||||||
|
|
||||||
|
## Signaturprosjekter
|
||||||
|
|
||||||
|
Situasjon: fire etater delte ikke data. Bidrag: felles register og avtaleverk.
|
||||||
|
Maalbart utfall: 11 av 14 tjenester tok det i bruk paa ett aar. Dekker krav om
|
||||||
|
arkitektur og gjennomfoering.
|
||||||
|
|
||||||
|
## Kjente svakheter
|
||||||
|
|
||||||
|
| svakhet | kompensasjon | tiltak |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| lite linjeledelse | prosjektledelse i stor skala | soeker teamlead-ansvar |
|
||||||
|
|
||||||
|
## Formuleringer som virker
|
||||||
|
|
||||||
|
"Jeg tar ansvar for at det faktisk tas i bruk, ikke bare leveres."
|
||||||
|
|
||||||
|
## Profilgap
|
||||||
|
|
||||||
|
Mangler erfaring med anskaffelser over EOES-terskel.
|
||||||
59
tests/fixtures/profiles/04-ukjent-nokkel.md
vendored
Normal file
59
tests/fixtures/profiles/04-ukjent-nokkel.md
vendored
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
---
|
||||||
|
# Proveniens: syntetisk testdata for jobbsok. Ingen ekte person, ingen ekte
|
||||||
|
# arbeidsgiver, ingen ekte annonse. Organisasjonsnumre er konstruert slik at
|
||||||
|
# de FEILER mod-11-kontrollen. Alle datoer er relative til 2026-09-15.
|
||||||
|
oppdatert: 2026-09-15
|
||||||
|
geografi:
|
||||||
|
base: Tromsø
|
||||||
|
maks_reisetid_min: 45
|
||||||
|
hjemmekontor_min_dager: 2
|
||||||
|
vurderer_flytting: nei
|
||||||
|
lonn:
|
||||||
|
gulv_nok: 850000
|
||||||
|
onsket_nok: 950000
|
||||||
|
kommentar: fast stilling, ikke konsulentpaaslag
|
||||||
|
ansettelsesform:
|
||||||
|
aksepterer: fast
|
||||||
|
avviser: vikariat
|
||||||
|
absolutte_nei:
|
||||||
|
- turnus
|
||||||
|
- rendyrket salg
|
||||||
|
senioritet:
|
||||||
|
min: senior
|
||||||
|
maks: leder
|
||||||
|
favorittfarge: bla
|
||||||
|
---
|
||||||
|
|
||||||
|
## Kjerne
|
||||||
|
|
||||||
|
Profil med en noekkel kontrakten i seksjon 5.1 ikke kjenner.
|
||||||
|
|
||||||
|
## Kompetanse
|
||||||
|
|
||||||
|
Dybde: datadeling i offentlig sektor -- ledet innfoeringen av et felles
|
||||||
|
API-register (belegg: Signaturprosjekt 1). Bredde: innkjoep, arkitektur.
|
||||||
|
Under oppbygging: maskinlaering i drift.
|
||||||
|
|
||||||
|
## Retning
|
||||||
|
|
||||||
|
Mot: fagansvar med reell beslutningsmyndighet. Bort fra: rene bestillerroller.
|
||||||
|
|
||||||
|
## Signaturprosjekter
|
||||||
|
|
||||||
|
Situasjon: fire etater delte ikke data. Bidrag: felles register og avtaleverk.
|
||||||
|
Maalbart utfall: 11 av 14 tjenester tok det i bruk paa ett aar. Dekker krav om
|
||||||
|
arkitektur og gjennomfoering.
|
||||||
|
|
||||||
|
## Kjente svakheter
|
||||||
|
|
||||||
|
| svakhet | kompensasjon | tiltak |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| lite linjeledelse | prosjektledelse i stor skala | soeker teamlead-ansvar |
|
||||||
|
|
||||||
|
## Formuleringer som virker
|
||||||
|
|
||||||
|
"Jeg tar ansvar for at det faktisk tas i bruk, ikke bare leveres."
|
||||||
|
|
||||||
|
## Profilgap
|
||||||
|
|
||||||
|
Mangler erfaring med anskaffelser over EOES-terskel.
|
||||||
63
tests/fixtures/profiles/05-eksplisitte-vekter.md
vendored
Normal file
63
tests/fixtures/profiles/05-eksplisitte-vekter.md
vendored
Normal file
|
|
@ -0,0 +1,63 @@
|
||||||
|
---
|
||||||
|
# Proveniens: syntetisk testdata for jobbsok. Ingen ekte person, ingen ekte
|
||||||
|
# arbeidsgiver, ingen ekte annonse. Organisasjonsnumre er konstruert slik at
|
||||||
|
# de FEILER mod-11-kontrollen. Alle datoer er relative til 2026-09-15.
|
||||||
|
oppdatert: 2026-09-15
|
||||||
|
geografi:
|
||||||
|
base: Tromsø
|
||||||
|
maks_reisetid_min: 45
|
||||||
|
hjemmekontor_min_dager: 2
|
||||||
|
vurderer_flytting: nei
|
||||||
|
lonn:
|
||||||
|
gulv_nok: 850000
|
||||||
|
onsket_nok: 950000
|
||||||
|
kommentar: fast stilling, ikke konsulentpaaslag
|
||||||
|
ansettelsesform:
|
||||||
|
aksepterer: fast
|
||||||
|
avviser: vikariat
|
||||||
|
absolutte_nei:
|
||||||
|
- turnus
|
||||||
|
- rendyrket salg
|
||||||
|
senioritet:
|
||||||
|
min: senior
|
||||||
|
maks: leder
|
||||||
|
vekter:
|
||||||
|
fagomrade: 4
|
||||||
|
oppgavetype: 3
|
||||||
|
teknologi: 2
|
||||||
|
selskapstype: 1
|
||||||
|
---
|
||||||
|
|
||||||
|
## Kjerne
|
||||||
|
|
||||||
|
Profil som oppgir vekter selv, i stedet for aa arve standardvektene.
|
||||||
|
|
||||||
|
## Kompetanse
|
||||||
|
|
||||||
|
Dybde: datadeling i offentlig sektor -- ledet innfoeringen av et felles
|
||||||
|
API-register (belegg: Signaturprosjekt 1). Bredde: innkjoep, arkitektur.
|
||||||
|
Under oppbygging: maskinlaering i drift.
|
||||||
|
|
||||||
|
## Retning
|
||||||
|
|
||||||
|
Mot: fagansvar med reell beslutningsmyndighet. Bort fra: rene bestillerroller.
|
||||||
|
|
||||||
|
## Signaturprosjekter
|
||||||
|
|
||||||
|
Situasjon: fire etater delte ikke data. Bidrag: felles register og avtaleverk.
|
||||||
|
Maalbart utfall: 11 av 14 tjenester tok det i bruk paa ett aar. Dekker krav om
|
||||||
|
arkitektur og gjennomfoering.
|
||||||
|
|
||||||
|
## Kjente svakheter
|
||||||
|
|
||||||
|
| svakhet | kompensasjon | tiltak |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| lite linjeledelse | prosjektledelse i stor skala | soeker teamlead-ansvar |
|
||||||
|
|
||||||
|
## Formuleringer som virker
|
||||||
|
|
||||||
|
"Jeg tar ansvar for at det faktisk tas i bruk, ikke bare leveres."
|
||||||
|
|
||||||
|
## Profilgap
|
||||||
|
|
||||||
|
Mangler erfaring med anskaffelser over EOES-terskel.
|
||||||
58
tests/fixtures/profiles/06-uten-vekter.md
vendored
Normal file
58
tests/fixtures/profiles/06-uten-vekter.md
vendored
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
---
|
||||||
|
# Proveniens: syntetisk testdata for jobbsok. Ingen ekte person, ingen ekte
|
||||||
|
# arbeidsgiver, ingen ekte annonse. Organisasjonsnumre er konstruert slik at
|
||||||
|
# de FEILER mod-11-kontrollen. Alle datoer er relative til 2026-09-15.
|
||||||
|
oppdatert: 2026-09-15
|
||||||
|
geografi:
|
||||||
|
base: Bergen
|
||||||
|
maks_reisetid_min: 30
|
||||||
|
hjemmekontor_min_dager: 1
|
||||||
|
vurderer_flytting: ja
|
||||||
|
lonn:
|
||||||
|
gulv_nok: 720000
|
||||||
|
onsket_nok: 800000
|
||||||
|
kommentar: aapen
|
||||||
|
ansettelsesform:
|
||||||
|
aksepterer: fast
|
||||||
|
avviser: vikariat
|
||||||
|
absolutte_nei:
|
||||||
|
- turnus
|
||||||
|
- rendyrket salg
|
||||||
|
senioritet:
|
||||||
|
min: senior
|
||||||
|
maks: leder
|
||||||
|
---
|
||||||
|
|
||||||
|
## Kjerne
|
||||||
|
|
||||||
|
Profil uten vekter i det hele tatt; scoringen maa falle tilbake.
|
||||||
|
|
||||||
|
## Kompetanse
|
||||||
|
|
||||||
|
Dybde: datadeling i offentlig sektor -- ledet innfoeringen av et felles
|
||||||
|
API-register (belegg: Signaturprosjekt 1). Bredde: innkjoep, arkitektur.
|
||||||
|
Under oppbygging: maskinlaering i drift.
|
||||||
|
|
||||||
|
## Retning
|
||||||
|
|
||||||
|
Mot: fagansvar med reell beslutningsmyndighet. Bort fra: rene bestillerroller.
|
||||||
|
|
||||||
|
## Signaturprosjekter
|
||||||
|
|
||||||
|
Situasjon: fire etater delte ikke data. Bidrag: felles register og avtaleverk.
|
||||||
|
Maalbart utfall: 11 av 14 tjenester tok det i bruk paa ett aar. Dekker krav om
|
||||||
|
arkitektur og gjennomfoering.
|
||||||
|
|
||||||
|
## Kjente svakheter
|
||||||
|
|
||||||
|
| svakhet | kompensasjon | tiltak |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| lite linjeledelse | prosjektledelse i stor skala | soeker teamlead-ansvar |
|
||||||
|
|
||||||
|
## Formuleringer som virker
|
||||||
|
|
||||||
|
"Jeg tar ansvar for at det faktisk tas i bruk, ikke bare leveres."
|
||||||
|
|
||||||
|
## Profilgap
|
||||||
|
|
||||||
|
Mangler erfaring med anskaffelser over EOES-terskel.
|
||||||
56
tests/fixtures/profiles/07-feil-seksjonsrekkefolge.md
vendored
Normal file
56
tests/fixtures/profiles/07-feil-seksjonsrekkefolge.md
vendored
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
---
|
||||||
|
# Proveniens: syntetisk testdata for jobbsok. Ingen ekte person, ingen ekte
|
||||||
|
# arbeidsgiver, ingen ekte annonse. Organisasjonsnumre er konstruert slik at
|
||||||
|
# de FEILER mod-11-kontrollen. Alle datoer er relative til 2026-09-15.
|
||||||
|
oppdatert: 2026-09-15
|
||||||
|
geografi:
|
||||||
|
base: Tromsø
|
||||||
|
maks_reisetid_min: 45
|
||||||
|
hjemmekontor_min_dager: 2
|
||||||
|
vurderer_flytting: nei
|
||||||
|
lonn:
|
||||||
|
gulv_nok: 850000
|
||||||
|
onsket_nok: 950000
|
||||||
|
kommentar: fast stilling, ikke konsulentpaaslag
|
||||||
|
ansettelsesform:
|
||||||
|
aksepterer: fast
|
||||||
|
avviser: vikariat
|
||||||
|
absolutte_nei:
|
||||||
|
- turnus
|
||||||
|
- rendyrket salg
|
||||||
|
senioritet:
|
||||||
|
min: senior
|
||||||
|
maks: leder
|
||||||
|
---
|
||||||
|
|
||||||
|
## Profilgap
|
||||||
|
|
||||||
|
Mangler erfaring med anskaffelser over EOES-terskel.
|
||||||
|
|
||||||
|
## Kjerne
|
||||||
|
|
||||||
|
Raadgiver som faar datadeling til aa skje i praksis.
|
||||||
|
|
||||||
|
## Signaturprosjekter
|
||||||
|
|
||||||
|
Situasjon: fire etater delte ikke data. Bidrag: felles register. Maalbart
|
||||||
|
utfall: 11 av 14 tjenester tok det i bruk. Dekker krav om arkitektur.
|
||||||
|
|
||||||
|
## Kompetanse
|
||||||
|
|
||||||
|
Dybde: datadeling (belegg: Signaturprosjekt 1). Bredde: innkjoep.
|
||||||
|
Under oppbygging: maskinlaering i drift.
|
||||||
|
|
||||||
|
## Retning
|
||||||
|
|
||||||
|
Mot: fagansvar. Bort fra: rene bestillerroller.
|
||||||
|
|
||||||
|
## Kjente svakheter
|
||||||
|
|
||||||
|
| svakhet | kompensasjon | tiltak |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| lite linjeledelse | prosjektledelse | soeker teamlead-ansvar |
|
||||||
|
|
||||||
|
## Formuleringer som virker
|
||||||
|
|
||||||
|
"Jeg tar ansvar for at det tas i bruk."
|
||||||
14
tests/fixtures/profiles/08-ugyldig-yaml.md
vendored
Normal file
14
tests/fixtures/profiles/08-ugyldig-yaml.md
vendored
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
---
|
||||||
|
# Proveniens: syntetisk testdata for jobbsok. Ingen ekte person, ingen ekte
|
||||||
|
# arbeidsgiver, ingen ekte annonse. Organisasjonsnumre er konstruert slik at
|
||||||
|
# de FEILER mod-11-kontrollen. Alle datoer er relative til 2026-09-15.
|
||||||
|
oppdatert: 2026-09-15
|
||||||
|
geografi:
|
||||||
|
base: Bodø
|
||||||
|
lonn:
|
||||||
|
gulv_nok: 850000
|
||||||
|
---
|
||||||
|
|
||||||
|
## Kjerne
|
||||||
|
|
||||||
|
Denne profilen skal ikke parse. Tabulator i innrykk, med vilje.
|
||||||
189
tests/test_fixture_hygiene.py
Normal file
189
tests/test_fixture_hygiene.py
Normal file
|
|
@ -0,0 +1,189 @@
|
||||||
|
"""The fixture corpus is anonymised, and this test is what makes that a fact
|
||||||
|
rather than an intention (plan Step 7).
|
||||||
|
|
||||||
|
This repository has a PUBLIC remote. A fixture carrying the operator's real
|
||||||
|
name, home address, employer or a real job-board URL would be published the
|
||||||
|
moment it is pushed, and no later cleanup un-publishes it. So the corpus is
|
||||||
|
scanned on every run, before it grows past the point where anyone reads it
|
||||||
|
whole.
|
||||||
|
|
||||||
|
The scan reports its denominator, and that is the point rather than a
|
||||||
|
courtesy. "Found nothing" is a measurement, and a measurement without a
|
||||||
|
denominator is indistinguishable from a scan that ran over an empty
|
||||||
|
directory, matched nothing because its patterns were wrong, or never ran at
|
||||||
|
all. So every run says how many files and how many bytes it looked at, and
|
||||||
|
`test_the_scan_can_actually_find` seeds a canary into a temporary corpus and
|
||||||
|
requires the scan to catch it -- a scanner that cannot find is not evidence of
|
||||||
|
absence.
|
||||||
|
|
||||||
|
Two deliberate deviations from the plan text, both stated rather than
|
||||||
|
smuggled:
|
||||||
|
|
||||||
|
1. The operator's home address is not hard-coded here. Writing a real home
|
||||||
|
address into a deny list on a public remote would publish the very thing
|
||||||
|
the list exists to keep out. Private tokens go in the environment variable
|
||||||
|
`JOBBSOK_HYGIENE_DENY_EXTRA` (newline-separated) instead, and the scan
|
||||||
|
picks them up if it is set. The name and employer ARE listed literally,
|
||||||
|
because both already appear in every commit's author metadata on the same
|
||||||
|
public remote -- listing them costs nothing that is not already public and
|
||||||
|
buys a check that actually runs.
|
||||||
|
2. The provenance-header rule covers the directories this step seeds.
|
||||||
|
`cowork-probe/` is exempt by name: it is the Step 1 probe rig, machine
|
||||||
|
config with no person in it, and it predates this rule.
|
||||||
|
|
||||||
|
Style note: this file follows tests/test_helpers_selfcheck.py.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import warnings
|
||||||
|
|
||||||
|
FIXTURES = os.path.join(os.path.dirname(os.path.abspath(__file__)), "fixtures")
|
||||||
|
|
||||||
|
#: Directories seeded by this step, and the ones the provenance rule governs.
|
||||||
|
CORPUS_DIRS = ("profiles", "listings")
|
||||||
|
|
||||||
|
#: Exempt from the provenance rule, with the reason in the module docstring.
|
||||||
|
PROVENANCE_EXEMPT = ("cowork-probe",)
|
||||||
|
|
||||||
|
#: Literal tokens that must never appear. Real employer names and real job
|
||||||
|
#: boards; the person tokens are already public in the commit metadata.
|
||||||
|
DENY_TOKENS = (
|
||||||
|
"Kjell Tore",
|
||||||
|
"Guttormsen",
|
||||||
|
"Statens vegvesen",
|
||||||
|
"vegvesen",
|
||||||
|
"finn.no",
|
||||||
|
"arbeidsplassen.nav.no",
|
||||||
|
"jobbnorge.no",
|
||||||
|
"linkedin.com",
|
||||||
|
"indeed.com",
|
||||||
|
)
|
||||||
|
|
||||||
|
#: Extra deny tokens supplied at run time, one per line. This is where a home
|
||||||
|
#: address belongs -- checked, never committed.
|
||||||
|
DENY_EXTRA_ENV = "JOBBSOK_HYGIENE_DENY_EXTRA"
|
||||||
|
|
||||||
|
#: Every host and mail domain in the corpus must sit under the reserved
|
||||||
|
#: `.example` TLD (RFC 2606), so nothing in here can resolve to a real place.
|
||||||
|
SAFE_TLD = ".example"
|
||||||
|
|
||||||
|
EMAIL_RE = re.compile(r"[A-Za-z0-9._%+-]+@([A-Za-z0-9.-]+\.[A-Za-z]{2,})")
|
||||||
|
URL_HOST_RE = re.compile(r"https?://([A-Za-z0-9.:-]+)")
|
||||||
|
|
||||||
|
PROVENANCE_MARKER = "Proveniens:"
|
||||||
|
|
||||||
|
|
||||||
|
class KorpusSkannet(UserWarning):
|
||||||
|
"""Not a defect: the denominator the hygiene scan actually looked at.
|
||||||
|
|
||||||
|
Emitted as a warning because pytest shows warnings even under ``-q``,
|
||||||
|
while a passing test's stdout is captured and never reaches the operator.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def deny_tokens():
|
||||||
|
tokens = list(DENY_TOKENS)
|
||||||
|
extra = os.environ.get(DENY_EXTRA_ENV, "")
|
||||||
|
tokens.extend(line.strip() for line in extra.splitlines() if line.strip())
|
||||||
|
return tokens
|
||||||
|
|
||||||
|
|
||||||
|
def corpus_files(root):
|
||||||
|
found = []
|
||||||
|
for dirpath, dirnames, filenames in os.walk(root):
|
||||||
|
dirnames.sort()
|
||||||
|
for name in sorted(filenames):
|
||||||
|
found.append(os.path.join(dirpath, name))
|
||||||
|
return found
|
||||||
|
|
||||||
|
|
||||||
|
def scan(root):
|
||||||
|
"""Scan every file under ``root`` and report findings AND the denominator."""
|
||||||
|
tokens = deny_tokens()
|
||||||
|
findings = []
|
||||||
|
files = corpus_files(root)
|
||||||
|
total_bytes = 0
|
||||||
|
|
||||||
|
for path in files:
|
||||||
|
with open(path, "r", encoding="utf-8") as handle:
|
||||||
|
text = handle.read()
|
||||||
|
total_bytes += len(text.encode("utf-8"))
|
||||||
|
relative = os.path.relpath(path, root)
|
||||||
|
|
||||||
|
lowered = text.lower()
|
||||||
|
for token in tokens:
|
||||||
|
if token.lower() in lowered:
|
||||||
|
findings.append((relative, "deny-token %r" % token))
|
||||||
|
for domain in EMAIL_RE.findall(text):
|
||||||
|
if not domain.lower().endswith(SAFE_TLD):
|
||||||
|
findings.append((relative, "mail domain %r is not %s" % (domain, SAFE_TLD)))
|
||||||
|
for host in URL_HOST_RE.findall(text):
|
||||||
|
if not host.lower().split(":")[0].endswith(SAFE_TLD):
|
||||||
|
findings.append((relative, "url host %r is not %s" % (host, SAFE_TLD)))
|
||||||
|
|
||||||
|
return {"files": len(files), "bytes": total_bytes, "findings": findings}
|
||||||
|
|
||||||
|
|
||||||
|
def report(result, root):
|
||||||
|
message = "hygiene scan: %d files, %d bytes scanned under %s; %d finding(s)" % (
|
||||||
|
result["files"],
|
||||||
|
result["bytes"],
|
||||||
|
os.path.basename(root.rstrip(os.sep)),
|
||||||
|
len(result["findings"]),
|
||||||
|
)
|
||||||
|
print(message)
|
||||||
|
warnings.warn(message, KorpusSkannet)
|
||||||
|
return message
|
||||||
|
|
||||||
|
|
||||||
|
def test_every_corpus_fixture_carries_a_provenance_header():
|
||||||
|
checked = 0
|
||||||
|
for name in CORPUS_DIRS:
|
||||||
|
directory = os.path.join(FIXTURES, name)
|
||||||
|
assert os.path.isdir(directory), "corpus directory %r is missing" % name
|
||||||
|
files = corpus_files(directory)
|
||||||
|
assert files, "corpus directory %r is empty" % name
|
||||||
|
for path in files:
|
||||||
|
with open(path, "r", encoding="utf-8") as handle:
|
||||||
|
text = handle.read()
|
||||||
|
assert PROVENANCE_MARKER in text, "%s has no %r header" % (path, PROVENANCE_MARKER)
|
||||||
|
checked += 1
|
||||||
|
# Eight profiles and eight listings, per the plan. A rule that checked
|
||||||
|
# zero files would pass just as quietly.
|
||||||
|
assert checked == 16, "expected 16 corpus fixtures, provenance-checked %d" % checked
|
||||||
|
|
||||||
|
|
||||||
|
def test_no_deny_listed_token_appears_anywhere_in_the_corpus():
|
||||||
|
result = scan(FIXTURES)
|
||||||
|
assert result["findings"] == [], "hygiene findings: %r" % (result["findings"],)
|
||||||
|
|
||||||
|
|
||||||
|
def test_the_scan_states_the_denominator_it_looked_at():
|
||||||
|
result = scan(FIXTURES)
|
||||||
|
message = report(result, FIXTURES)
|
||||||
|
assert result["files"] >= 16
|
||||||
|
assert result["bytes"] > 0
|
||||||
|
assert str(result["files"]) in message and "bytes scanned" in message
|
||||||
|
|
||||||
|
|
||||||
|
def test_the_scan_can_actually_find(tmp_path):
|
||||||
|
# A canary corpus, deliberately dirty. It lives in tmp_path and never in
|
||||||
|
# tests/fixtures, because a canary committed to a public remote is the
|
||||||
|
# leak it is supposed to warn about.
|
||||||
|
(tmp_path / "cv.md").write_text(
|
||||||
|
"Proveniens: kanarifugl.\nTidligere hos Statens vegvesen.\n", encoding="utf-8"
|
||||||
|
)
|
||||||
|
(tmp_path / "kontakt.md").write_text(
|
||||||
|
"Proveniens: kanarifugl.\nSkriv til rekruttering@fjordtek.no\n", encoding="utf-8"
|
||||||
|
)
|
||||||
|
(tmp_path / "lenke.md").write_text(
|
||||||
|
"Proveniens: kanarifugl.\nSe https://www.finn.no/job/123\n", encoding="utf-8"
|
||||||
|
)
|
||||||
|
|
||||||
|
result = scan(str(tmp_path))
|
||||||
|
reasons = " ".join(reason for _path, reason in result["findings"])
|
||||||
|
assert result["files"] == 3
|
||||||
|
assert "vegvesen" in reasons
|
||||||
|
assert "fjordtek.no" in reasons
|
||||||
|
assert "finn.no" in reasons
|
||||||
Loading…
Add table
Add a link
Reference in a new issue