From cda56e4a267e922c7a58e73316cf39694540f325 Mon Sep 17 00:00:00 2001 From: Herman Wika Horn Date: Fri, 5 Jan 2024 19:33:24 +0100 Subject: [PATCH] Ensure the Organisasjonsnummer.er(...)-function returns desirable results when using country code The previous implementation, which I somewhat regrettably released as version 4.0.2, is not ideal when comparing an organisation number without country code to an organisation number with country code. The changes made here establish that in such cases, only the organisation numbers should be compared, disregarding country codes. --- .../api/representations/Organisasjonsnummer.java | 11 ++++++----- .../api/representations/OrganisasjonsnummerTest.java | 6 ++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/api-commons/src/main/java/no/digipost/api/representations/Organisasjonsnummer.java b/api-commons/src/main/java/no/digipost/api/representations/Organisasjonsnummer.java index 155e81b..93845be 100644 --- a/api-commons/src/main/java/no/digipost/api/representations/Organisasjonsnummer.java +++ b/api-commons/src/main/java/no/digipost/api/representations/Organisasjonsnummer.java @@ -20,14 +20,13 @@ public final class Organisasjonsnummer { static final String COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_NEW = "0192"; private static final Pattern ORGANIZATION_NUMBER_PATTERN = Pattern.compile("^((" + COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_OLD + "|" + COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_NEW + "):)?([0-9]{9})$"); private final String organisasjonsnummer; - private final String landkode; + private final Optional landkode; private Organisasjonsnummer(MatchResult matchedOrganisasjonsnummer) { int groupOfOrganizationNumber = matchedOrganisasjonsnummer.groupCount(); this.organisasjonsnummer = matchedOrganisasjonsnummer.group(groupOfOrganizationNumber); - this.landkode = Optional.ofNullable(matchedOrganisasjonsnummer.group(groupOfOrganizationNumber - 1)) - .orElse(COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_OLD); + this.landkode = Optional.ofNullable(matchedOrganisasjonsnummer.group(groupOfOrganizationNumber - 1)); } public static boolean erGyldig(String organisasjonsnummer) { @@ -58,11 +57,13 @@ public String getOrganisasjonsnummer() { } public String getOrganisasjonsnummerMedLandkode() { - return landkode + ":" + organisasjonsnummer; + return landkode.orElse(COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_OLD) + ":" + organisasjonsnummer; } public boolean er(String organisasjonsnummerString) { - return hvisGyldig(organisasjonsnummerString).filter(this::equals).isPresent(); + return hvisGyldig(organisasjonsnummerString) + .filter(orgnr -> orgnr.landkode.isPresent() && this.landkode.isPresent() ? this.equals(orgnr) : this.organisasjonsnummer.equals(orgnr.organisasjonsnummer)) + .isPresent(); } public boolean erEnAv(Organisasjonsnummer... kandidater) { diff --git a/api-commons/src/test/java/no/digipost/api/representations/OrganisasjonsnummerTest.java b/api-commons/src/test/java/no/digipost/api/representations/OrganisasjonsnummerTest.java index 38a1fa9..7d7281a 100644 --- a/api-commons/src/test/java/no/digipost/api/representations/OrganisasjonsnummerTest.java +++ b/api-commons/src/test/java/no/digipost/api/representations/OrganisasjonsnummerTest.java @@ -107,6 +107,12 @@ public void evaluates_string_with_or_without_authoroty_part_as_same() { assertTrue(organisasjonsnummer.er(organisasjonsnummer.getOrganisasjonsnummerMedLandkode())); } + @Test + public void without_authority_part_is_Same_as_with_authority_part() { + Organisasjonsnummer organisasjonsnummer = Organisasjonsnummer.of("0192:984661185"); + assertTrue(organisasjonsnummer.er(organisasjonsnummer.getOrganisasjonsnummer())); + } + @Test public void evaluates_other_strings_as_not_same() { Organisasjonsnummer organisasjonsnummer = Organisasjonsnummer.of("984661185");