Skip to content

Commit

Permalink
Merge pull request #142 from digipost/new-country-code
Browse files Browse the repository at this point in the history
Support both country code 9908 and 0192 in Organisasjonsnummer
  • Loading branch information
hermanwh authored Jan 10, 2024
2 parents ff50bdc + a6eff7b commit 97dbe88
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,17 @@ public final class Organisasjonsnummer {

public static final String ISO6523_ACTORID = PMode.PARTY_ID_TYPE;
public static final String ISO6523_ACTORID_OLD = "iso6523-actorid-upis";
private static final String COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY = "9908";
private static final Pattern ORGANIZATION_NUMBER_PATTERN = Pattern.compile("^(" + COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY + ":)?([0-9]{9})$");
static final String COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_OLD = "9908";
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 Optional<String> landkode;


private Organisasjonsnummer(MatchResult matchedOrganisasjonsnummer) {
int groupOfOrganizationNumber = matchedOrganisasjonsnummer.groupCount();
this.organisasjonsnummer = matchedOrganisasjonsnummer.group(groupOfOrganizationNumber);
this.landkode = Optional.ofNullable(matchedOrganisasjonsnummer.group(groupOfOrganizationNumber - 1));
}

public static boolean erGyldig(String organisasjonsnummer) {
Expand All @@ -44,7 +47,8 @@ public static Organisasjonsnummer of(String organisasjonsnummer) {
throw new IllegalArgumentException(
"Ugyldig organisasjonsnummer. Forventet format er ISO 6523, men fikk følgende nummer: '" +
organisasjonsnummer + "'. Organisasjonsnummeret skal være 9 siffer og kan prefikses med " +
"landkode 9908. Eksempler på dette er '9908:984661185' og '984661185'.");
"enten landkode 9908 eller 0192. Eksempler på dette er '9908:984661185', '0192:984661185' " +
"og '984661185'.");
}
}

Expand All @@ -53,11 +57,17 @@ public String getOrganisasjonsnummer() {
}

public String getOrganisasjonsnummerMedLandkode() {
return COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY + ":" + 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 erSammeOrganisasjonsnummerUavhengigAvLandkode(Organisasjonsnummer organisasjonsnummer) {
return this.organisasjonsnummer.equals(organisasjonsnummer.organisasjonsnummer);
}

public boolean erEnAv(Organisasjonsnummer... kandidater) {
Expand All @@ -77,14 +87,14 @@ public String toString() {
public boolean equals(Object obj) {
if (obj instanceof Organisasjonsnummer) {
Organisasjonsnummer that = (Organisasjonsnummer) obj;
return Objects.equals(this.organisasjonsnummer, that.organisasjonsnummer);
return Objects.equals(this.organisasjonsnummer, that.organisasjonsnummer) && Objects.equals(this.landkode, that.landkode);
}
return false;
}

@Override
public int hashCode() {
return Objects.hash(organisasjonsnummer);
return Objects.hash(organisasjonsnummer, landkode);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

import java.util.Optional;

import static no.digipost.api.representations.Organisasjonsnummer.COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_NEW;
import static no.digipost.api.representations.Organisasjonsnummer.COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_OLD;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.junit.jupiter.api.Assertions.assertFalse;
Expand All @@ -14,13 +16,29 @@
public class OrganisasjonsnummerTest {

@Test
public void initializes_organisasjonsnummer() {
public void initializes_organisasjonsnummer_without_prefix() {
String nummer = "984661185";
Organisasjonsnummer organisasjonsnummer = Organisasjonsnummer.of(nummer);

assertThat(organisasjonsnummer.toString(), is(nummer));
}

@Test
public void initializes_organisasjonsnummer_with_new_prefix() {
String nummer = COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_NEW + ":984661185";
Organisasjonsnummer organisasjonsnummer = Organisasjonsnummer.of(nummer);

assertThat(organisasjonsnummer.getOrganisasjonsnummerMedLandkode(), is(nummer));
}

@Test
public void initializes_organisasjonsnummer_with_old_prefix() {
String nummer = COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_OLD + ":984661185";
Organisasjonsnummer organisasjonsnummer = Organisasjonsnummer.of(nummer);

assertThat(organisasjonsnummer.getOrganisasjonsnummerMedLandkode(), is(nummer));
}

@Test
public void constructor_throws_exception_if_not_valid() {
assertThrows(IllegalArgumentException.class, () -> Organisasjonsnummer.of("98466118522222"));
Expand All @@ -32,8 +50,8 @@ public void invalid_prefix_with_length_4_throws_exception() {
}

@Test
public void with_landkode_returns_return_organisasjosnummer_with_9908_prefix() {
String expected = "9908:984661185";
public void with_old_landkode_returns_return_organisasjosnummer_with_9908_prefix() {
String expected = COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_OLD + ":984661185";
Organisasjonsnummer organisasjonsnummer = Organisasjonsnummer.of("984661185");

String actual = organisasjonsnummer.getOrganisasjonsnummerMedLandkode();
Expand All @@ -42,8 +60,8 @@ public void with_landkode_returns_return_organisasjosnummer_with_9908_prefix() {
}

@Test
public void with_landkode_returns_organisasjosnummer_without_9908_prefix() {
String source = "9908:984661185";
public void with_new_landkode_returns_organisasjosnummer_without_9908_prefix() {
String source = COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_NEW + ":984661185";
String expected = "984661185";

Organisasjonsnummer organisasjonsnummer = Organisasjonsnummer.of(source);
Expand All @@ -54,7 +72,7 @@ public void with_landkode_returns_organisasjosnummer_without_9908_prefix() {
@Test
public void without_landkode_returns_organisasjosnummer_with_9908_prefix() {
String source = "984661185";
String expected = "9908:984661185";
String expected = COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_OLD + ":984661185";

Organisasjonsnummer organisasjonsnummer = Organisasjonsnummer.of(source);

Expand Down Expand Up @@ -89,13 +107,36 @@ 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");
assertFalse(organisasjonsnummer.er("xyz"));
assertFalse(organisasjonsnummer.er("991825827"));
}

@Test
public void evaluates_other_organisasjonsnummer_as_same() {
Organisasjonsnummer withoutCountryCode = Organisasjonsnummer.of("984661185");
Organisasjonsnummer withNewCountryCode = Organisasjonsnummer.of(COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_NEW + ":984661185");
Organisasjonsnummer withOldCountryCode = Organisasjonsnummer.of(COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_OLD + ":984661185");
Organisasjonsnummer notEqual = Organisasjonsnummer.of("123456789");
assertTrue(withoutCountryCode.erSammeOrganisasjonsnummerUavhengigAvLandkode(withNewCountryCode));
assertTrue(withoutCountryCode.erSammeOrganisasjonsnummerUavhengigAvLandkode(withOldCountryCode));
assertTrue(withNewCountryCode.erSammeOrganisasjonsnummerUavhengigAvLandkode(withoutCountryCode));
assertTrue(withNewCountryCode.erSammeOrganisasjonsnummerUavhengigAvLandkode(withOldCountryCode));
assertTrue(withOldCountryCode.erSammeOrganisasjonsnummerUavhengigAvLandkode(withoutCountryCode));
assertTrue(withOldCountryCode.erSammeOrganisasjonsnummerUavhengigAvLandkode(withNewCountryCode));
assertFalse(notEqual.erSammeOrganisasjonsnummerUavhengigAvLandkode(withoutCountryCode));
assertFalse(notEqual.erSammeOrganisasjonsnummerUavhengigAvLandkode(withNewCountryCode));
assertFalse(notEqual.erSammeOrganisasjonsnummerUavhengigAvLandkode(withOldCountryCode));
}

@Test
public void correct_equals_and_hashcode() {
EqualsVerifier.forClass(Organisasjonsnummer.class).verify();
Expand Down

0 comments on commit 97dbe88

Please sign in to comment.