Skip to content

Commit

Permalink
Ensure the Organisasjonsnummer.er(...)-function returns desirable res…
Browse files Browse the repository at this point in the history
…ults 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.
  • Loading branch information
hermanwh committed Jan 5, 2024
1 parent 5a677d1 commit cda56e4
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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<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);
this.landkode = Optional.ofNullable(matchedOrganisasjonsnummer.group(groupOfOrganizationNumber - 1));
}

public static boolean erGyldig(String organisasjonsnummer) {
Expand Down Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down

0 comments on commit cda56e4

Please sign in to comment.