Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support both country code 9908 and 0192 in Organisasjonsnummer #142

Merged
merged 3 commits into from
Jan 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading