Skip to content

Commit 97dbe88

Browse files
authored
Merge pull request #142 from digipost/new-country-code
Support both country code 9908 and 0192 in Organisasjonsnummer
2 parents ff50bdc + a6eff7b commit 97dbe88

File tree

2 files changed

+64
-13
lines changed

2 files changed

+64
-13
lines changed

api-commons/src/main/java/no/digipost/api/representations/Organisasjonsnummer.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,17 @@ public final class Organisasjonsnummer {
1616

1717
public static final String ISO6523_ACTORID = PMode.PARTY_ID_TYPE;
1818
public static final String ISO6523_ACTORID_OLD = "iso6523-actorid-upis";
19-
private static final String COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY = "9908";
20-
private static final Pattern ORGANIZATION_NUMBER_PATTERN = Pattern.compile("^(" + COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY + ":)?([0-9]{9})$");
19+
static final String COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_OLD = "9908";
20+
static final String COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_NEW = "0192";
21+
private static final Pattern ORGANIZATION_NUMBER_PATTERN = Pattern.compile("^((" + COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_OLD + "|" + COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_NEW + "):)?([0-9]{9})$");
2122
private final String organisasjonsnummer;
23+
private final Optional<String> landkode;
2224

2325

2426
private Organisasjonsnummer(MatchResult matchedOrganisasjonsnummer) {
2527
int groupOfOrganizationNumber = matchedOrganisasjonsnummer.groupCount();
2628
this.organisasjonsnummer = matchedOrganisasjonsnummer.group(groupOfOrganizationNumber);
29+
this.landkode = Optional.ofNullable(matchedOrganisasjonsnummer.group(groupOfOrganizationNumber - 1));
2730
}
2831

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

@@ -53,11 +57,17 @@ public String getOrganisasjonsnummer() {
5357
}
5458

5559
public String getOrganisasjonsnummerMedLandkode() {
56-
return COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY + ":" + organisasjonsnummer;
60+
return landkode.orElse(COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_OLD) + ":" + organisasjonsnummer;
5761
}
5862

5963
public boolean er(String organisasjonsnummerString) {
60-
return hvisGyldig(organisasjonsnummerString).filter(this::equals).isPresent();
64+
return hvisGyldig(organisasjonsnummerString)
65+
.filter(orgnr -> orgnr.landkode.isPresent() && this.landkode.isPresent() ? this.equals(orgnr) : this.organisasjonsnummer.equals(orgnr.organisasjonsnummer))
66+
.isPresent();
67+
}
68+
69+
public boolean erSammeOrganisasjonsnummerUavhengigAvLandkode(Organisasjonsnummer organisasjonsnummer) {
70+
return this.organisasjonsnummer.equals(organisasjonsnummer.organisasjonsnummer);
6171
}
6272

6373
public boolean erEnAv(Organisasjonsnummer... kandidater) {
@@ -77,14 +87,14 @@ public String toString() {
7787
public boolean equals(Object obj) {
7888
if (obj instanceof Organisasjonsnummer) {
7989
Organisasjonsnummer that = (Organisasjonsnummer) obj;
80-
return Objects.equals(this.organisasjonsnummer, that.organisasjonsnummer);
90+
return Objects.equals(this.organisasjonsnummer, that.organisasjonsnummer) && Objects.equals(this.landkode, that.landkode);
8191
}
8292
return false;
8393
}
8494

8595
@Override
8696
public int hashCode() {
87-
return Objects.hash(organisasjonsnummer);
97+
return Objects.hash(organisasjonsnummer, landkode);
8898
}
8999

90100
}

api-commons/src/test/java/no/digipost/api/representations/OrganisasjonsnummerTest.java

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
import java.util.Optional;
77

8+
import static no.digipost.api.representations.Organisasjonsnummer.COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_NEW;
9+
import static no.digipost.api.representations.Organisasjonsnummer.COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_OLD;
810
import static org.hamcrest.MatcherAssert.assertThat;
911
import static org.hamcrest.Matchers.is;
1012
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -14,13 +16,29 @@
1416
public class OrganisasjonsnummerTest {
1517

1618
@Test
17-
public void initializes_organisasjonsnummer() {
19+
public void initializes_organisasjonsnummer_without_prefix() {
1820
String nummer = "984661185";
1921
Organisasjonsnummer organisasjonsnummer = Organisasjonsnummer.of(nummer);
2022

2123
assertThat(organisasjonsnummer.toString(), is(nummer));
2224
}
2325

26+
@Test
27+
public void initializes_organisasjonsnummer_with_new_prefix() {
28+
String nummer = COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_NEW + ":984661185";
29+
Organisasjonsnummer organisasjonsnummer = Organisasjonsnummer.of(nummer);
30+
31+
assertThat(organisasjonsnummer.getOrganisasjonsnummerMedLandkode(), is(nummer));
32+
}
33+
34+
@Test
35+
public void initializes_organisasjonsnummer_with_old_prefix() {
36+
String nummer = COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_OLD + ":984661185";
37+
Organisasjonsnummer organisasjonsnummer = Organisasjonsnummer.of(nummer);
38+
39+
assertThat(organisasjonsnummer.getOrganisasjonsnummerMedLandkode(), is(nummer));
40+
}
41+
2442
@Test
2543
public void constructor_throws_exception_if_not_valid() {
2644
assertThrows(IllegalArgumentException.class, () -> Organisasjonsnummer.of("98466118522222"));
@@ -32,8 +50,8 @@ public void invalid_prefix_with_length_4_throws_exception() {
3250
}
3351

3452
@Test
35-
public void with_landkode_returns_return_organisasjosnummer_with_9908_prefix() {
36-
String expected = "9908:984661185";
53+
public void with_old_landkode_returns_return_organisasjosnummer_with_9908_prefix() {
54+
String expected = COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_OLD + ":984661185";
3755
Organisasjonsnummer organisasjonsnummer = Organisasjonsnummer.of("984661185");
3856

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

4462
@Test
45-
public void with_landkode_returns_organisasjosnummer_without_9908_prefix() {
46-
String source = "9908:984661185";
63+
public void with_new_landkode_returns_organisasjosnummer_without_9908_prefix() {
64+
String source = COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_NEW + ":984661185";
4765
String expected = "984661185";
4866

4967
Organisasjonsnummer organisasjonsnummer = Organisasjonsnummer.of(source);
@@ -54,7 +72,7 @@ public void with_landkode_returns_organisasjosnummer_without_9908_prefix() {
5472
@Test
5573
public void without_landkode_returns_organisasjosnummer_with_9908_prefix() {
5674
String source = "984661185";
57-
String expected = "9908:984661185";
75+
String expected = COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_OLD + ":984661185";
5876

5977
Organisasjonsnummer organisasjonsnummer = Organisasjonsnummer.of(source);
6078

@@ -89,13 +107,36 @@ public void evaluates_string_with_or_without_authoroty_part_as_same() {
89107
assertTrue(organisasjonsnummer.er(organisasjonsnummer.getOrganisasjonsnummerMedLandkode()));
90108
}
91109

110+
@Test
111+
public void without_authority_part_is_Same_as_with_authority_part() {
112+
Organisasjonsnummer organisasjonsnummer = Organisasjonsnummer.of("0192:984661185");
113+
assertTrue(organisasjonsnummer.er(organisasjonsnummer.getOrganisasjonsnummer()));
114+
}
115+
92116
@Test
93117
public void evaluates_other_strings_as_not_same() {
94118
Organisasjonsnummer organisasjonsnummer = Organisasjonsnummer.of("984661185");
95119
assertFalse(organisasjonsnummer.er("xyz"));
96120
assertFalse(organisasjonsnummer.er("991825827"));
97121
}
98122

123+
@Test
124+
public void evaluates_other_organisasjonsnummer_as_same() {
125+
Organisasjonsnummer withoutCountryCode = Organisasjonsnummer.of("984661185");
126+
Organisasjonsnummer withNewCountryCode = Organisasjonsnummer.of(COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_NEW + ":984661185");
127+
Organisasjonsnummer withOldCountryCode = Organisasjonsnummer.of(COUNTRY_CODE_ORGANIZATION_NUMBER_NORWAY_OLD + ":984661185");
128+
Organisasjonsnummer notEqual = Organisasjonsnummer.of("123456789");
129+
assertTrue(withoutCountryCode.erSammeOrganisasjonsnummerUavhengigAvLandkode(withNewCountryCode));
130+
assertTrue(withoutCountryCode.erSammeOrganisasjonsnummerUavhengigAvLandkode(withOldCountryCode));
131+
assertTrue(withNewCountryCode.erSammeOrganisasjonsnummerUavhengigAvLandkode(withoutCountryCode));
132+
assertTrue(withNewCountryCode.erSammeOrganisasjonsnummerUavhengigAvLandkode(withOldCountryCode));
133+
assertTrue(withOldCountryCode.erSammeOrganisasjonsnummerUavhengigAvLandkode(withoutCountryCode));
134+
assertTrue(withOldCountryCode.erSammeOrganisasjonsnummerUavhengigAvLandkode(withNewCountryCode));
135+
assertFalse(notEqual.erSammeOrganisasjonsnummerUavhengigAvLandkode(withoutCountryCode));
136+
assertFalse(notEqual.erSammeOrganisasjonsnummerUavhengigAvLandkode(withNewCountryCode));
137+
assertFalse(notEqual.erSammeOrganisasjonsnummerUavhengigAvLandkode(withOldCountryCode));
138+
}
139+
99140
@Test
100141
public void correct_equals_and_hashcode() {
101142
EqualsVerifier.forClass(Organisasjonsnummer.class).verify();

0 commit comments

Comments
 (0)