---
#check options
-
    name: check OPTIONS for subscriberregistrations
    type: item
    method: OPTIONS
    path: /api/subscriberregistrations/
    conditions:
        is:
            code: 200
            header:
                Accept-Post: application/hal+json; profile=http://purl.org/sipwise/ngcp-api/#rel-subscriberregistrations
        ok:
            options:
                - GET
                - HEAD
                - OPTIONS
                - POST

#create test domain
-
    name: create test domain
    type: item
    method: POST
    path: /api/domains/
    header:
        Content-Type: application/json
    content:
        domain: test${unique_id}.example.org
        reseller_id: 1
    conditions:
        is:
            code: 201
    retain:
        domain_path: header.location
        domain_id: header.location

#create a BillingProfile
-
    name: create a BillingProfile
    type: item
    method: POST
    path: /api/billingprofiles/
    header:
        Content-Type: application/json
        Prefer: return=representation
    content:
        name: test profile ${unique_id}
        handle: test_profile_handle${unique_id}
        reseller_id: 1
    conditions:
        is:
            code: 201
    retain:
        billing_profile_id: header.location

#create a Customer Contact
-
    name: create a Customer Contact
    type: item
    method: POST
    path: /api/customercontacts/
    header:
        Content-Type: application/json
    content:
        firstname: cust_contact_first
        lastname: cust_contact_last
        email: cust_contact@custcontact.invalid
        reseller_id: 1
    conditions:
        is:
            code: 201
    retain:
        customer_contact_path: header.location
        customer_contact_id: header.location

#get CustomerContact
-
    name: check CustomerContact
    type: item
    method: GET
    path: '/${customer_contact_path}'
    retain:
        customer_contact: body
    perl_code: !!perl/code |
        {
            my ($retained) = @_;
            $retained->{customer_type} = 'sipaccount';
        }
    conditions:
        is:
            code: 200

#create Customer
-
    name: include create Customer
    type: include
    file: CreateCustomer.yaml
    perl_code: !!perl/code |
        {
            my ($retained) = @_;
            $retained->{customer_content} = {
                status => 'active',
                contact_id => $retained->{customer_contact_id},
                billing_profile_id => $retained->{billing_profile_id},
                type => 'sipaccount',
                max_subscribers => undef,
                external_id => undef
            };
        }

#create Subscriber
-
    name: include create Subscriber
    type: include
    file: CreateSubscriber.yaml
    perl_code: !!perl/code |
        {
            my ($retained) = @_;

            my $cc = 800;
            my $ac = '1';
            my $sn = $retained->{unique_id};
            $retained->{subscriber_content} = {
                primary_number => { cc => $cc, ac => $ac, sn => $sn },
                domain_id => $retained->{domain_id},
                username => 'subscriber_' . '1' . '_'.$retained->{unique_id},
                password => 'subscriber_password',
                customer_id => $retained->{customer}->{id},
            };
        }

#create subscriberregistrations
-
    name: create subscriberregistrations
    type: item
    method: POST
    path: '/api/subscriberregistrations/'
    header:
        Content-Type: application/json
    content:
        contact: test_1
        subscriber_id: ${subscriber_id}
        q: '0.5'
        expires: '2019-09-03 12:00:00'
    retain:
        subscriberregistrations_path1: header.location
    conditions:
        is:
            code: 201

#create subscriberregistrations
-
    name: create subscriberregistrations
    type: item
    method: POST
    path: '/api/subscriberregistrations/'
    header:
        Content-Type: application/json
    content:
        contact: test_2
        subscriber_id: ${subscriber_id}
        q: '0.5'
        expires: '2019-09-03 12:00:00'
        enabled: 1
    retain:
        subscriberregistrations_path2: header.location
    conditions:
        is:
            code: 201

#create subscriberregistrations
-
    name: create subscriberregistrations
    type: item
    method: POST
    path: '/api/subscriberregistrations/'
    header:
        Content-Type: application/json
    content:
        contact: test_3
        subscriber_id: ${subscriber_id}
        q: '0.5'
        expires: '2019-09-03 12:00:00'
    retain:
        subscriberregistrations_path3: header.location
    conditions:
        is:
            code: 201

#verify pagination
-
    name: verify pagination
    type: pagination
    method: GET
    path: '/api/subscriberregistrations/?page=1&rows=2'
    retain:
        collection: body
    conditions:
        is:
            code: 200

#check options on item
-
    name: check OPTIONS for subscriberregistrations item
    type: item
    method: OPTIONS
    path: '/${subscriberregistrations_path3}'
    conditions:
        is:
            code: 200
        ok:
            options:
                - GET
                - HEAD
                - OPTIONS
                - PUT
                - PATCH
                - DELETE

#DELETE subscriberregistrations
-
    name: DELETE subscriberregistrations
    type: item
    method: DELETE
    path: '/${subscriberregistrations_path1}'
    conditions:
        is:
            code: 204

#DELETE subscriberregistrations
-
    name: DELETE subscriberregistrations
    type: item
    method: DELETE
    path: '/${subscriberregistrations_path2}'
    conditions:
        is:
            code: 204

#DELETE subscriberregistrations
-
    name: DELETE subscriberregistrations
    type: item
    method: DELETE
    path: '/${subscriberregistrations_path3}'
    conditions:
        is:
            code: 204

#create subscriberregistrations
-
    name: create subscriberregistrations
    type: item
    method: POST
    path: '/api/subscriberregistrations/'
    header:
        Content-Type: application/json
    content:
        contact: test_4
        subscriber_id: ${subscriber_id}
        q: '0.5'
        expires: '2019-09-03 12:00:00'
    retain:
        subscriberregistrations_path4: header.location
    conditions:
        is:
            code: 201

#get subscriberregistrations
-
    name: GET subscriberregistrations
    type: item
    method: GET
    path: '/${subscriberregistrations_path4}'
    retain:
        subscriberregistrations: body
    perl_code: !!perl/code |
        {
            my ($retained) = @_;
            delete $retained->{subscriberregistrations}->{_links};
            delete $retained->{subscriberregistrations}->{_embedded};
            delete $retained->{subscriberregistrations}->{id};
        }
    conditions:
        is:
            code: 200

#put subscriberregistrations
-
    name: PUT subscriberregistrations
    type: item
    method: PUT
    path: '/${subscriberregistrations_path4}'
    header:
        Content-Type: application/json
        Prefer: return=representation
    content: '${subscriberregistrations}'
    retain:
        subscriberregistrations_path_updated: header.location
    conditions:
        is:
            code: 200

#get subscriberregistrations
-
    name: GET subscriberregistrations
    type: item
    method: GET
    path: '/${subscriberregistrations_path_updated}'
    retain:
        new_subscriberregistrations: body
    perl_code: !!perl/code |
        {
            my ($retained) = @_;
            delete $retained->{new_subscriberregistrations}->{_links};
            delete $retained->{new_subscriberregistrations}->{_embedded};
            delete $retained->{new_subscriberregistrations}->{id};
            delete $retained->{new_subscriberregistrations}->{expires};
            delete $retained->{subscriberregistrations}->{expires};
        }
    conditions:
        is:
            code: 200
        is_deeply:
            '${subscriberregistrations}': ${new_subscriberregistrations}

#DELETE subscriberregistrations
-
    name: DELETE subscriberregistrations
    type: item
    method: DELETE
    path: '/${subscriberregistrations_path_updated}'
    conditions:
        is:
            code: 204

#create subscriberregistrations with q > 1
-
    name: create subscriberregistrations with q > 1
    type: item
    method: POST
    path: '/api/subscriberregistrations/'
    header:
        Content-Type: application/json
    content:
        contact: test_5
        subscriber_id: ${subscriber_id}
        q: '2'
        expires: '2019-09-03 12:00:00'
    retain:
        subscriberregistrations_path5: header.location
    conditions:
        is:
            code: 422

#create subscriberregistrations with q < -1
-
    name: create subscriberregistrations with q < -1
    type: item
    method: POST
    path: '/api/subscriberregistrations/'
    header:
        Content-Type: application/json
    content:
        contact: test_5
        subscriber_id: ${subscriber_id}
        q: '-2'
        expires: '2019-09-03 12:00:00'
    retain:
        subscriberregistrations_path5: header.location
    conditions:
        is:
            code: 422

#create subscriberregistrations without q
-
    name: create subscriberregistrations without q
    type: item
    method: POST
    path: '/api/subscriberregistrations/'
    header:
        Content-Type: application/json
    content:
        contact: test_5
        subscriber_id: ${subscriber_id}
        expires: '2019-09-03 12:00:00'
    retain:
        subscriberregistrations_path5: header.location
    conditions:
        is:
            code: 201

#create subscriberregistrations without expires
-
    name: create subscriberregistrations without expires
    type: item
    method: POST
    path: '/api/subscriberregistrations/'
    header:
        Content-Type: application/json
    content:
        contact: test_6
        subscriber_id: ${subscriber_id}
        q: '0.5'
    retain:
        subscriberregistrations_path6: header.location
    conditions:
        is:
            code: 422

#DELETE subscriberregistrations
-
    name: DELETE subscriberregistrations
    type: item
    method: DELETE
    path: '/${subscriberregistrations_path5}'
    conditions:
        is:
            code: 204