GDPR-IAB-TCFv2

 view release on metacpan or  search on metacpan

t/03-json-range.t  view on Meta::CPAN

use strict;
use warnings;

use Test::More;

use GDPR::IAB::TCFv2;

# use JSON;
# use DateTime;
# use DateTimeX::TO_JSON formatter => 'DateTime::Format::RFC3339';

subtest "range" => sub {
  subtest "should convert data to json using compact flag and 0/1 as booleans" => sub {
    subtest "should convert data to json using yyyymmdd as date format" => sub {
      my $consent = GDPR::IAB::TCFv2->Parse(
        'COyfVVoOyfVVoADACHENAwCAAAAAAAAAAAAAE5QBgALgAqgD8AQACSwEygJyAnSAMABgAFkAgQCDASeAmYBOgAA',
        json => {
          verbose        => 0,
          compact        => 1,
          use_epoch      => 0,
          boolean_values => [0, 1],
          date_format    => '%Y%m%d',    # yyymmdd
        },
      );

      my $got      = $consent->TO_JSON();
      my $expected = _fixture_range_compact(created => 20200427, last_updated => 20200427,);

      is_deeply $got, $expected, "must return the json hashref";

      done_testing;
    };

    subtest "should convert data to json using epoch date format" => sub {
      my $consent = GDPR::IAB::TCFv2->Parse(
        'COyfVVoOyfVVoADACHENAwCAAAAAAAAAAAAAE5QBgALgAqgD8AQACSwEygJyAnSAMABgAFkAgQCDASeAmYBOgAA',
        json => {verbose => 0, compact => 1, use_epoch => 1, boolean_values => [0, 1],},
      );


      my $got      = $consent->TO_JSON();
      my $expected = _fixture_range_compact(created => 1587946020, last_updated => 1587946020,);

      is_deeply $got, $expected, "must return the json hashref";

      done_testing;
    };

    done_testing;
  };

  subtest "should convert data to json using default (non-compact) and 0/1 as booleans" => sub {

    subtest "default non verbose, date as iso 8601" => sub {
      my $consent = GDPR::IAB::TCFv2->Parse(
        'COyfVVoOyfVVoADACHENAwCAAAAAAAAAAAAAE5QBgALgAqgD8AQACSwEygJyAnSAMABgAFkAgQCDASeAmYBOgAA',
        json => {verbose => 0, compact => 0, use_epoch => 0, boolean_values => [0, 1],},
      );

      ok $consent->vendor_consent(23);

      my $got      = $consent->TO_JSON();
      my $expected = _fixture_range_default();

      is_deeply $got, $expected, "must return the json hashref";

      done_testing;
    };

    subtest "default verbose, date as iso 8601" => sub {
      my $consent = GDPR::IAB::TCFv2->Parse(
        'COyfVVoOyfVVoADACHENAwCAAAAAAAAAAAAAE5QBgALgAqgD8AQACSwEygJyAnSAMABgAFkAgQCDASeAmYBOgAA',
        json => {verbose => 1, compact => 0, use_epoch => 0, boolean_values => [0, 1],},
      );

      ok $consent->vendor_consent(23);

      my $got      = $consent->TO_JSON();
      my $expected = _fixture_range_verbose();

      is_deeply $got, $expected, "must return the json hashref";

      done_testing;
    };

    done_testing;
  };

  subtest "publisher section" => sub {
    subtest "publisher section without publisher_tc" => sub {
      my $consent = GDPR::IAB::TCFv2->Parse('COwAdDhOwAdDhN4ABAENAPCgAAQAAv___wAAAFP_AAp_4AI6ACACAA',
        json => {verbose => 0, compact => 1, use_epoch => 0, boolean_values => [0, 1],},);

      my $got      = $consent->TO_JSON;
      my $expected = {"publisher" => {"restrictions" => {"7" => {"32" => 1}}}};

      is_deeply $got->{publisher}, $expected->{publisher}, "must return the same publisher restriction section";

      done_testing;
    };
    subtest "publisher section with publisher_tc" => sub {
      subtest "without custom purposes" => sub {
        my $consent = GDPR::IAB::TCFv2->Parse(
          'COwAdDhOwAdDhN4ABAENAPCgAAQAAv___wAAAFP_AAp_4AI6ACACAA.argAC0gAAAAAAAAAAAA',
          json => {verbose => 0, compact => 1, use_epoch => 0, boolean_values => [0, 1],},
        );

        my $got      = $consent->TO_JSON;
        my $expected = {
          "publisher" => {
            "consents"             => [2, 4, 6, 8, 9, 10],
            "legitimate_interests" => [2, 4, 5, 7, 10],
            "custom_purposes"      => {"consents" => [], "legitimate_interests" => [],},
            "restrictions"         => {"7"        => {"32" => 1}}
          }
        };

        is_deeply $got->{publisher}, $expected->{publisher}, "must return the same publisher restriction section";

        done_testing;
      };

      subtest "with custom purposes" => sub {
        my $consent = GDPR::IAB::TCFv2->Parse(
          'COwAdDhOwAdDhN4ABAENAPCgAAQAAv___wAAAFP_AAp_4AI6ACACAA.YAAAAAAAAXA',
          json => {verbose => 0, compact => 1, use_epoch => 0, boolean_values => [0, 1],},
        );

        my $got      = $consent->TO_JSON;
        my $expected = {
          "publisher" => {
            "consents"             => [],
            "legitimate_interests" => [],
            "custom_purposes"      => {"consents" => [1, 2], "legitimate_interests" => [1],},
            "restrictions"         => {"7"        => {"32" => 1}}
          }
        };

        is_deeply $got->{publisher}, $expected->{publisher}, "must return the same publisher restriction section";

        done_testing;
      };

      done_testing;
    };

    done_testing;
  };

  subtest "TO_JSON method should return the same hashref " => sub {
    my $consent = GDPR::IAB::TCFv2->Parse(
      'COyfVVoOyfVVoADACHENAwCAAAAAAAAAAAAAE5QBgALgAqgD8AQACSwEygJyAnSAMABgAFkAgQCDASeAmYBOgAA',
      json => {verbose => 0, compact => 1, use_epoch => 0, boolean_values => [0, 1],},
    );


    my $got1 = $consent->TO_JSON();
    my $got2 = $consent->TO_JSON();

    is_deeply $got1, $got2, "must return the same hashref";

    done_testing;
  };

  done_testing;

};

done_testing;

sub _fixture_range_compact {
  my (%extra) = @_;

  return {
    'tc_string'        => 'COyfVVoOyfVVoADACHENAwCAAAAAAAAAAAAAE5QBgALgAqgD8AQACSwEygJyAnSAMABgAFkAgQCDASeAmYBOgAA',
    'consent_language' => 'EN',
    'purpose'          => {'consents' => [], 'legitimate_interests' => []},
    'cmp_id'           => 3,
    'purpose_one_treatment'   => 0,
    'publisher'               => {'restrictions' => {}},
    'special_features_opt_in' => [],
    'last_updated'            => '20200427',
    'use_non_standard_stacks' => 0,
    'policy_version'          => 2,
    'version'                 => 2,
    'is_service_specific'     => 0,
    'created'                 => '20200427',
    'consent_screen'          => 7,
    'vendor_list_version'     => 48,
    'cmp_version'             => 2,
    'publisher_country_code'  => 'AA',
    'vendor'                  => {
      'consents'             => [23, 42, 126, 127, 128, 587, 613, 626],
      'legitimate_interests' => [24, 44, 129, 130, 131, 591, 614, 628]
    },
    %extra
  };
}

sub _fixture_range_default {
  my (%extra) = @_;

  return {
    'tc_string'        => 'COyfVVoOyfVVoADACHENAwCAAAAAAAAAAAAAE5QBgALgAqgD8AQACSwEygJyAnSAMABgAFkAgQCDASeAmYBOgAA',
    'consent_language' => 'EN',
    'purpose'          => {'consents' => {}, 'legitimate_interests' => {}},
    'cmp_id'           => 3,
    'purpose_one_treatment'   => 0,
    'publisher'               => {'restrictions' => {}},
    'special_features_opt_in' => {},
    'last_updated'            => '2020-04-27T00:07:00Z',
    'use_non_standard_stacks' => 0,
    'policy_version'          => 2,



( run in 0.533 second using v1.01-cache-2.11-cpan-acf6aa7dc9e )