diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index a32950d8..4924a251 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -10,7 +10,7 @@ public class UsNat extends AbstractLazilyEncodableSection { public static int ID = 7; - public static int VERSION = 1; + public static int VERSION = 2; public static String NAME = "usnat"; public UsNat() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 6c7a7945..14c33053 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -9,6 +9,7 @@ import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNatField; import com.iab.gpp.encoder.section.UsNat; @@ -84,6 +85,12 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { String bitString = bitStringEncoder.encode(fields, getFieldNames()); + + Integer version = (Integer)fields.get(UsNatField.VERSION).getValue(); + if(version == 1) { + bitString = bitString.substring(0, 48) + bitString.substring(56, 60) + bitString.substring(62); + } + String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -110,4 +117,17 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel } } + @Override + public Object getFieldValue(String fieldName) { + Object value = super.getFieldValue(fieldName); + Integer version = (Integer)super.getFieldValue(UsNatField.VERSION); + if(version == 1) { + if (fieldName.equals(UsNatField.SENSITIVE_DATA_PROCESSING)) { + value = ((List) value).subList(0, 12); + } else if (fieldName.equals(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)) { + value = ((List) value).subList(0, 2); + } + } + return value; + } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index d1890a59..5ce2717c 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -4,22 +4,11 @@ import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Arrays; + +import com.iab.gpp.encoder.field.*; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.TcfCaV1Field; -import com.iab.gpp.encoder.field.TcfEuV2Field; -import com.iab.gpp.encoder.field.UsCaField; -import com.iab.gpp.encoder.field.UsCoField; -import com.iab.gpp.encoder.field.UsCtField; -import com.iab.gpp.encoder.field.UsFlField; -import com.iab.gpp.encoder.field.UsMtField; -import com.iab.gpp.encoder.field.UsNatField; -import com.iab.gpp.encoder.field.UsOrField; -import com.iab.gpp.encoder.field.UsTxField; -import com.iab.gpp.encoder.field.UsUtField; -import com.iab.gpp.encoder.field.UsVaField; -import com.iab.gpp.encoder.field.UspV1Field; import com.iab.gpp.encoder.section.TcfCaV1; import com.iab.gpp.encoder.section.TcfEuV2; import com.iab.gpp.encoder.section.UsCa; @@ -110,12 +99,12 @@ public void testEncodeDefaultAll() { gppModel.setFieldValue(UsMt.NAME, UsMtField.VERSION, UsMt.VERSION); gppModel.setFieldValue(UsOr.NAME, UsOrField.VERSION, UsOr.VERSION); gppModel.setFieldValue(UsTx.NAME, UsTxField.VERSION, UsTx.VERSION); - gppModel.setFieldValue(UsDe.NAME, UsTxField.VERSION, UsTx.VERSION); - gppModel.setFieldValue(UsIa.NAME, UsTxField.VERSION, UsTx.VERSION); - gppModel.setFieldValue(UsNe.NAME, UsTxField.VERSION, UsTx.VERSION); - gppModel.setFieldValue(UsNh.NAME, UsTxField.VERSION, UsTx.VERSION); - gppModel.setFieldValue(UsNj.NAME, UsTxField.VERSION, UsTx.VERSION); - gppModel.setFieldValue(UsTn.NAME, UsTxField.VERSION, UsTx.VERSION); + gppModel.setFieldValue(UsDe.NAME, UsDeField.VERSION, UsDe.VERSION); + gppModel.setFieldValue(UsIa.NAME, UsIaField.VERSION, UsIa.VERSION); + gppModel.setFieldValue(UsNe.NAME, UsNeField.VERSION, UsNe.VERSION); + gppModel.setFieldValue(UsNh.NAME, UsNhField.VERSION, UsNh.VERSION); + gppModel.setFieldValue(UsNj.NAME, UsNjField.VERSION, UsNj.VERSION); + gppModel.setFieldValue(UsTn.NAME, UsTnField.VERSION, UsTn.VERSION); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); @@ -140,7 +129,53 @@ public void testEncodeDefaultAll() { String gppString = gppModel.encode(); Assertions.assertEquals( - "DBACOdM~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~BAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA", + "DBACOdM~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~CAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA", + gppString); + } + + @Test + public void testEncodeUsNatV1WithV1Values() { + GppModel gppModel = new GppModel(); + gppModel.setFieldValue(UsNat.NAME, UsNatField.VERSION, 1); + gppModel.setFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)); + gppModel.setFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 1)); + String gppString = gppModel.encode(); + Assertions.assertEquals( + "DBABLA~BAAAVVVVUQA.QA", + gppString); + } + + @Test + public void testEncodeUsNatV1WithV2Values() { + GppModel gppModel = new GppModel(); + gppModel.setFieldValue(UsNat.NAME, UsNatField.VERSION, 1); + gppModel.setFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)); + gppModel.setFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 1, 1)); + String gppString = gppModel.encode(); + Assertions.assertEquals( + "DBABLA~BAAAVVVVUQA.QA", + gppString); + } + + @Test + public void testEncodeUsNatV2WithV1Values() { + GppModel gppModel = new GppModel(); + gppModel.setFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)); + gppModel.setFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 1)); + String gppString = gppModel.encode(); + Assertions.assertEquals( + "DBABLA~CAAAVVVVAFBA.QA", + gppString); + } + + @Test + public void testEncodeUsNatV2WithV2Values() { + GppModel gppModel = new GppModel(); + gppModel.setFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)); + gppModel.setFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 1, 1)); + String gppString = gppModel.encode(); + Assertions.assertEquals( + "DBABLA~CAAAVVVVVVRA.QA", gppString); } @@ -150,7 +185,7 @@ public void testDecodingException() { new GppModel("invalid gpp string").getHeader(); }); } - + @Test() public void testDecodeGarbage() { Assertions.assertThrows(DecodingException.class, () -> { @@ -345,26 +380,26 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() { gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.VENDOR_LIST_VERSION, 413); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.USE_NON_STANDARD_STACKS, true); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT, - Arrays.asList(false, false, false, false, false, false, true, true, true, true, true, true)); + Arrays.asList(false, false, false, false, false, false, true, true, true, true, true, true)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.PURPOSES_EXPRESS_CONSENT, - Arrays.asList(true, true, true, true, true, true, false, false, false, false, false, false, true, true, true, - true, true, true, false, false, false, false, false, false)); + Arrays.asList(true, true, true, true, true, true, false, false, false, false, false, false, true, true, true, + true, true, true, false, false, false, false, false, false)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.PURPOSES_IMPLIED_CONSENT, - Arrays.asList(false, false, false, false, false, false, true, true, true, true, true, true, false, false, false, - false, false, false, true, true, true, true, true, true)); + Arrays.asList(false, false, false, false, false, false, true, true, true, true, true, true, false, false, false, + false, false, false, true, true, true, true, true, true)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.VENDOR_EXPRESS_CONSENT, Arrays.asList(12, 24, 48)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.VENDOR_IMPLIED_CONSENT, Arrays.asList(18, 30)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, - Arrays.asList(true, true, true, false, false, false, true, true, true, false, false, false, true, true, true, - false, false, false, true, true, true, false, false, false)); + Arrays.asList(true, true, true, false, false, false, true, true, true, false, false, false, true, true, true, + false, false, false, true, true, true, false, false, false)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, - Arrays.asList(false, false, false, true, true, true, false, false, false, true, true, true, false, false, false, - true, true, true, false, false, false, true, true, true)); + Arrays.asList(false, false, false, true, true, true, false, false, false, true, true, true, false, false, false, + true, true, true, false, false, false, true, true, true)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.NUM_CUSTOM_PURPOSES, 3); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, - Arrays.asList(false, true, false)); + Arrays.asList(false, true, false)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, - Arrays.asList(true, false, true)); + Arrays.asList(true, false, true)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CREATED, utcDateTime); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.LAST_UPDATED, utcDateTime); @@ -380,8 +415,8 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() { String gppString = gppModel.encode(); Assertions.assertEquals( - "DBACOeA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao~1YNN", - gppString); + "DBACOeA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao~1YNN", + gppString); Assertions.assertEquals(4, gppString.split("~").length); @@ -413,7 +448,7 @@ public void testDecodeDefaults() { @Test public void testDecodeDefaultsAll() { String gppString = - "DBACOdM~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~BAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA"; + "DBACOdM~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~BAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA"; GppModel gppModel = new GppModel(gppString); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); @@ -437,6 +472,42 @@ public void testDecodeDefaultsAll() { Assertions.assertEquals(true, gppModel.hasSection(UsTn.NAME)); } + @Test + public void testDecodeUsNatV1() { + String gppString = + "DBABLA~BAAAVVVVUQA.QA"; + GppModel gppModel = new GppModel(gppString); + + Assertions.assertEquals(true, gppModel.hasSection(UsNat.NAME)); + Assertions.assertEquals(1, gppModel.getFieldValue(UsNat.ID, UsNatField.VERSION)); + Assertions.assertEquals(Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), gppModel.getFieldValue(UsNat.ID, UsNatField.SENSITIVE_DATA_PROCESSING)); + Assertions.assertEquals(Arrays.asList(1, 1), gppModel.getFieldValue(UsNat.ID, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); + } + + @Test + public void testDecodeUsNatV2WithV1Values() { + String gppString = + "DBABLA~CAAAVVVVAFBA.QA"; + GppModel gppModel = new GppModel(gppString); + + Assertions.assertEquals(true, gppModel.hasSection(UsNat.NAME)); + Assertions.assertEquals(2, gppModel.getFieldValue(UsNat.ID, UsNatField.VERSION)); + Assertions.assertEquals(Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0), gppModel.getFieldValue(UsNat.ID, UsNatField.SENSITIVE_DATA_PROCESSING)); + Assertions.assertEquals(Arrays.asList(1, 1, 0), gppModel.getFieldValue(UsNat.ID, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); + } + + @Test + public void testDecodeUsNatV2WithV2Values() { + String gppString = + "DBABLA~CAAAVVVVVVRA.QA"; + GppModel gppModel = new GppModel(gppString); + + Assertions.assertEquals(true, gppModel.hasSection(UsNat.NAME)); + Assertions.assertEquals(2, gppModel.getFieldValue(UsNat.ID, UsNatField.VERSION)); + Assertions.assertEquals(Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), gppModel.getFieldValue(UsNat.ID, UsNatField.SENSITIVE_DATA_PROCESSING)); + Assertions.assertEquals(Arrays.asList(1, 1, 1), gppModel.getFieldValue(UsNat.ID, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); + } + @Test public void testDecodeUspv1() { String gppString = "DBABTA~1YNN"; @@ -570,7 +641,7 @@ public void testDecodeUspv1AndTcfEuV2() { @Test public void testDecodeUspv1AndTcfEuV2AndTcfCaV1() { String gppString = - "DBACOeA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao~1YNN"; + "DBACOeA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao~1YNN"; GppModel gppModel = new GppModel(gppString); Assertions.assertEquals(Arrays.asList(2, 5, 6), gppModel.getSectionIds()); @@ -614,29 +685,29 @@ public void testDecodeUspv1AndTcfEuV2AndTcfCaV1() { Assertions.assertEquals(413, tcfCaV1Section.getVendorListVersion()); Assertions.assertEquals(true, tcfCaV1Section.getUseNonStandardStacks()); Assertions.assertEquals(Arrays.asList(false, false, false, false, false, false, true, true, true, true, true, true), - tcfCaV1Section.getSpecialFeatureExpressConsent()); + tcfCaV1Section.getSpecialFeatureExpressConsent()); Assertions - .assertEquals( - Arrays.asList(true, true, true, true, true, true, false, false, false, false, false, false, true, true, - true, true, true, true, false, false, false, false, false, false), - tcfCaV1Section.getPurposesExpressConsent()); + .assertEquals( + Arrays.asList(true, true, true, true, true, true, false, false, false, false, false, false, true, true, + true, true, true, true, false, false, false, false, false, false), + tcfCaV1Section.getPurposesExpressConsent()); Assertions - .assertEquals( - Arrays.asList(false, false, false, false, false, false, true, true, true, true, true, true, false, false, - false, false, false, false, true, true, true, true, true, true), - tcfCaV1Section.getPurposesImpliedConsent()); + .assertEquals( + Arrays.asList(false, false, false, false, false, false, true, true, true, true, true, true, false, false, + false, false, false, false, true, true, true, true, true, true), + tcfCaV1Section.getPurposesImpliedConsent()); Assertions.assertEquals(Arrays.asList(12, 24, 48), tcfCaV1Section.getVendorExpressConsent()); Assertions.assertEquals(Arrays.asList(18, 30), tcfCaV1Section.getVendorImpliedConsent()); Assertions - .assertEquals( - Arrays.asList(true, true, true, false, false, false, true, true, true, false, false, false, true, true, - true, false, false, false, true, true, true, false, false, false), - tcfCaV1Section.getPubPurposesExpressConsent()); + .assertEquals( + Arrays.asList(true, true, true, false, false, false, true, true, true, false, false, false, true, true, + true, false, false, false, true, true, true, false, false, false), + tcfCaV1Section.getPubPurposesExpressConsent()); Assertions - .assertEquals( - Arrays.asList(false, false, false, true, true, true, false, false, false, true, true, true, false, false, - false, true, true, true, false, false, false, true, true, true), - tcfCaV1Section.getPubPurposesImpliedConsent()); + .assertEquals( + Arrays.asList(false, false, false, true, true, true, false, false, false, true, true, true, false, false, + false, true, true, true, false, false, false, true, true, true), + tcfCaV1Section.getPubPurposesImpliedConsent()); Assertions.assertEquals(3, tcfCaV1Section.getNumCustomPurposes()); Assertions.assertEquals(Arrays.asList(false, true, false), tcfCaV1Section.getCustomPurposesExpressConsent()); Assertions.assertEquals(Arrays.asList(true, false, true), tcfCaV1Section.getCustomPurposesImpliedConsent()); @@ -679,7 +750,7 @@ public void testEncode3() { gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED, utcDateTime); Assertions.assertEquals("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAFpQAwAAgCtAWkAAAAAAA.QAAA.IAAA", - gppModel.encode()); + gppModel.encode()); } @Test @@ -698,14 +769,14 @@ public void testDecode2() { public void testDecode3() { GppModel gppModel = new GppModel("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAFpQAwAAgCtAWkAAAAAAA.QAAA.IAAA"); Assertions.assertEquals(Arrays.asList(1, 173, 722), - gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); + gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); } - + @Test public void testDecode4() { GppModel gppModel = new GppModel("DBABTA~1YYN"); gppModel.getFieldValue(UspV1.NAME, UspV1Field.VERSION); - + } @Test @@ -713,68 +784,68 @@ public void testDecode5() { GppModel gppModel = new GppModel("DBABLA~BVQqAAAAAgA.QA"); gppModel.getFieldValue(UsNat.NAME, UspV1Field.VERSION); } - + @Test public void testDecode6() { - GppModel gppModel = new GppModel("DBABLA~BAAAAAAAAQA.QA"); + GppModel gppModel = new GppModel("DBABLA~CAAAAAAAAQA.QA"); gppModel.getFieldValue(UsNat.NAME, UspV1Field.VERSION); Assertions.assertEquals(Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); + gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); Assertions.assertEquals(Arrays.asList(0, 0, 0), - gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); + gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); } - + @Test public void testDecode7() { - GppModel gppModel = new GppModel("DBABLA~BAAAAAAAAABA.QA"); + GppModel gppModel = new GppModel("DBABLA~CAAAAAAAAABA.QA"); gppModel.getFieldValue(UsNat.NAME, UspV1Field.VERSION); Assertions.assertEquals(Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), - gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); + gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); Assertions.assertEquals(Arrays.asList(0, 0, 0), - gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); + gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); } - + @Test public void testDecode8() { - GppModel gppModel = new GppModel("DBABLA~BAAAAAABEQA.QA"); + GppModel gppModel = new GppModel("DBABLA~CAAAAAABEQA.QA"); gppModel.getFieldValue(UsNat.NAME, UspV1Field.VERSION); Assertions.assertEquals(Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0), - gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); + gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); Assertions.assertEquals(Arrays.asList(0, 1, 0), - gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); + gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); } - + @Test public void testDecode9() { - GppModel gppModel = new GppModel("DBABLA~BAAAAAAAAQRA.QA"); + GppModel gppModel = new GppModel("DBABLA~CAAAAAAAAQRA.QA"); gppModel.getFieldValue(UsNat.NAME, UspV1Field.VERSION); Assertions.assertEquals(Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1), - gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); + gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); Assertions.assertEquals(Arrays.asList(0, 0, 1), - gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); + gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); } - + @Test public void testConsistency() { GppModel fromObjectModel = new GppModel(); fromObjectModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS, - Arrays.asList(true, true, true, true, true, true, true, true, true, true)); + Arrays.asList(true, true, true, true, true, true, true, true, true, true)); fromObjectModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS, - Arrays.asList(32, 128, 81, 210, 755, 21, 173, 238)); + Arrays.asList(32, 128, 81, 210, 755, 21, 173, 238)); Assertions.assertEquals(fromObjectModel.getSection(TcfEuV2.NAME).encode(), - fromObjectModel.getSection(TcfEuV2.NAME).encode()); + fromObjectModel.getSection(TcfEuV2.NAME).encode()); Assertions.assertEquals(fromObjectModel.encode(), fromObjectModel.encode()); GppModel decodedModel = new GppModel(fromObjectModel.encode()); Assertions.assertEquals( - Arrays.asList(true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, - false, false, false, false, false, false, false, false, false), - decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS)); + Arrays.asList(true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, + false, false, false, false, false, false, false, false, false), + decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS)); Assertions.assertEquals(Arrays.asList(21, 32, 81, 128, 173, 210, 238, 755), - decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); + decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); } @@ -830,6 +901,6 @@ public void testDecodingExceptionValidStringButNotGPP() { } } - - + + } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java index f0cb813f..1cae6e34 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java @@ -102,6 +102,6 @@ public void testDecode8() { @Test public void testGiantRange() { String max = FibonacciIntegerEncoder.encode(FibonacciIntegerRangeEncoder.MAX_SIZE + 1); - Assertions.assertEquals(List.of(), FibonacciIntegerRangeEncoder.decode("000000000001111" + max)); + Assertions.assertEquals(new ArrayList<>(), FibonacciIntegerRangeEncoder.decode("000000000001111" + max)); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java index 769763ea..b781cd4c 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java @@ -132,6 +132,6 @@ public void testDecode10() { @Test public void testGiantRange() { String max = FibonacciIntegerEncoder.encode(FibonacciIntegerRangeEncoder.MAX_SIZE + 1); - Assertions.assertEquals(List.of(), FixedIntegerRangeEncoder.decode("00000000000110000000000000001" + max)); + Assertions.assertEquals(new ArrayList<>(), FixedIntegerRangeEncoder.decode("00000000000110000000000000001" + max)); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/.UsNatV1Test.java.swp b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/.UsNatV1Test.java.swp deleted file mode 100644 index 686ae751..00000000 Binary files a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/.UsNatV1Test.java.swp and /dev/null differ diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java index 67029545..fa060015 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java @@ -2,6 +2,8 @@ import java.util.Arrays; + +import com.iab.gpp.encoder.GppModel; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; @@ -14,7 +16,7 @@ public class UsNatTest { public void testEncode1() { UsNat usNat = new UsNat(); - Assertions.assertEquals("BAAAAAAAAABA.QA", usNat.encode()); + Assertions.assertEquals("CAAAAAAAAABA.QA", usNat.encode()); } @Test @@ -38,7 +40,7 @@ public void testEncode2() { usNat.setFieldValue(UsNatField.MSPA_SERVICE_PROVIDER_MODE, 2); usNat.setFieldValue(UsNatField.GPC, true); - Assertions.assertEquals("BVVVkkkkkpFY.YA", usNat.encode()); + Assertions.assertEquals("CVVVkkkkkpFY.YA", usNat.encode()); } @Test @@ -174,7 +176,7 @@ public void testEncode3() { usNat.setFieldValue(UsNatField.MSPA_SERVICE_PROVIDER_MODE, 2); usNat.setFieldValue(UsNatField.GPC, true); - Assertions.assertEquals("BVVVkkkkkpFY.YA", usNat.encode()); + Assertions.assertEquals("CVVVkkkkkpFY.YA", usNat.encode()); } @Test @@ -182,12 +184,54 @@ public void testEncodeWithGpcSegmentIncluded() { UsNat usNat = new UsNat(); usNat.setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, false); - Assertions.assertEquals("BAAAAAAAAABA", usNat.encode()); + Assertions.assertEquals("CAAAAAAAAABA", usNat.encode()); + } + + @Test + public void testEncodeUsNatV1WithV1Values() { + UsNat usNat = new UsNat(); + usNat.setFieldValue(UsNatField.VERSION, 1); + usNat.setFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)); + usNat.setFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 1)); + Assertions.assertEquals( + "BAAAVVVVUQA.QA", + usNat.encode()); + } + + @Test + public void testEncodeV1WithV2Values() { + UsNat usNat = new UsNat(); + usNat.setFieldValue(UsNatField.VERSION, 1); + usNat.setFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)); + usNat.setFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 1, 1)); + Assertions.assertEquals( + "BAAAVVVVUQA.QA", + usNat.encode()); + } + + @Test + public void testEncodeV2WithV1Values() { + UsNat usNat = new UsNat(); + usNat.setFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)); + usNat.setFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 1)); + Assertions.assertEquals( + "CAAAVVVVAFBA.QA", + usNat.encode()); + } + + @Test + public void testEncodeV2WithV2Values() { + UsNat usNat = new UsNat(); + usNat.setFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)); + usNat.setFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 1, 1)); + Assertions.assertEquals( + "CAAAVVVVVVRA.QA", + usNat.encode()); } @Test public void testDecode1() throws DecodingException { - UsNat usNat = new UsNat("BVVVkkkkkpFY.YA"); + UsNat usNat = new UsNat("CVVVkkkkkpFY.YA"); Assertions.assertEquals(1, usNat.getSharingNotice()); Assertions.assertEquals(1, usNat.getSaleOptOutNotice()); @@ -209,7 +253,7 @@ public void testDecode1() throws DecodingException { @Test public void testDecodeWithGpcSegmentExcluded() throws DecodingException { - UsNat usNat = new UsNat("BVVVkkkkkpFY"); + UsNat usNat = new UsNat("CVVVkkkkkpFY"); Assertions.assertEquals(1, usNat.getSharingNotice()); Assertions.assertEquals(1, usNat.getSaleOptOutNotice()); @@ -235,4 +279,31 @@ public void testDecodeGarbage() { new UsNat("z").getSharingNotice(); }); } + + @Test + public void testDecodeUsNatV1() { + UsNat usNat = new UsNat("BAAAVVVVUQA.QA"); + + Assertions.assertEquals(1, usNat.getFieldValue(UsNatField.VERSION)); + Assertions.assertEquals(Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), usNat.getFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING)); + Assertions.assertEquals(Arrays.asList(1, 1), usNat.getFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); + } + + @Test + public void testDecodeUsNatV2WithV1Values() { + UsNat usNat = new UsNat("CAAAVVVVAFBA.QA"); + + Assertions.assertEquals(2, usNat.getFieldValue(UsNatField.VERSION)); + Assertions.assertEquals(Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0), usNat.getFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING)); + Assertions.assertEquals(Arrays.asList(1, 1, 0), usNat.getFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); + } + + @Test + public void testDecodeUsNatV2WithV2Values() { + UsNat usNat = new UsNat("CAAAVVVVVVRA.QA"); + + Assertions.assertEquals(2, usNat.getFieldValue(UsNatField.VERSION)); + Assertions.assertEquals(Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), usNat.getFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING)); + Assertions.assertEquals(Arrays.asList(1, 1, 1), usNat.getFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); + } }