Skip to content

Commit

Permalink
Support both country code 9908 and 0192 in Organisasjonsnummer
Browse files Browse the repository at this point in the history
  • Loading branch information
hermanwh committed Jan 5, 2024
1 parent 367dec2 commit 5a677d1
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,18 @@ 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 String 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);
}

public static boolean erGyldig(String organisasjonsnummer) {
Expand All @@ -44,7 +48,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,7 +58,7 @@ public String getOrganisasjonsnummer() {
}

public String getOrganisasjonsnummerMedLandkode() {
return COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY + ":" + organisasjonsnummer;
return landkode + ":" + organisasjonsnummer;
}

public boolean er(String organisasjonsnummerString) {
Expand All @@ -77,14 +82,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

0 comments on commit 5a677d1

Please sign in to comment.