--- #check options - name: check OPTIONS for customercontacts type: item method: OPTIONS path: /api/customercontacts/ conditions: is: code: 200 header: Accept-Post: application/hal+json; profile=http://purl.org/sipwise/ngcp-api/#rel-customercontacts ok: options: - GET - HEAD - OPTIONS - POST #create customercontact - name: create customercontact type: item method: POST path: '/api/customercontacts/' header: Content-Type: application/json content: firstname: Test_First_1_${unique_id} lastname: Test_Last_1_${unique_id} email: test_1_.${unique_id}@test.invalid reseller_id: 1 retain: customercontact1_path: header.location conditions: is: code: 201 #create customercontact - name: create customercontact type: item method: POST path: '/api/customercontacts/' header: Content-Type: application/json content: firstname: Test_First_2_${unique_id} lastname: Test_Last_2_${unique_id} email: test_2_.${unique_id}@test.invalid reseller_id: 1 retain: customercontact2_path: header.location conditions: is: code: 201 #create customercontact - name: create customercontact type: item method: POST path: '/api/customercontacts/' header: Content-Type: application/json content: firstname: Test_First_3_${unique_id} lastname: Test_Last_3_${unique_id} email: test_3_.${unique_id}@test.invalid reseller_id: 1 retain: customercontact3_path: header.location conditions: is: code: 201 #verify pagination - name: verify pagination type: pagination method: GET path: '/api/customercontacts/?page=1&rows=2' retain: collection: body conditions: is: code: 200 #create contact without email - name: create contact without email type: item method: POST path: '/api/customercontacts/' header: Content-Type: application/json content: firstname: Test_First_invalid lastname: Test_Last_invalid reseller_id: 1 conditions: is: code: 422 body.code: 422 like: body.message: field='email' #create contact without reseller_id - name: create contact without reseller_id type: item method: POST path: '/api/customercontacts/' header: Content-Type: application/json content: firstname: Test_First_invalid lastname: Test_Last_invalid email: test_invalid@test.invalid conditions: is: code: 422 body.code: 422 like: body.message: field='reseller_id' #create contact with invalid reseller_id - name: create contact with invalid reseller_id type: item method: POST path: '/api/customercontacts/' header: Content-Type: application/json content: firstname: Test_First_invalid lastname: Test_Last_invalid email: test_invalid@test.invalid reseller_id: 99999 conditions: is: code: 422 body.code: 422 like: body.message: Invalid 'reseller_id' #check options for item - name: check OPTIONS for customercontacts item type: item method: OPTIONS path: /${customercontact1_path} conditions: is: code: 200 ok: options: - GET - HEAD - OPTIONS - PUT - PATCH - DELETE #get customercontact - name: GET customercontact type: item method: GET path: /${customercontact1_path} retain: customercontact: body perl_code: !!perl/code | { my ($retained) = @_; delete $retained->{customercontact}->{_links}; delete $retained->{customercontact}->{_embedded}; } conditions: is: code: 200 ok: '${customercontact}.firstname': defined '${customercontact}.lastname': defined '${customercontact}.email': defined like: '${customercontact}.id': '[0-9]+' '${customercontact}.reseller_id': '[0-9]+' #put customercontact with missing content-type - name: PUT customercontact with missing content-type type: item method: PUT path: '/${customercontact1_path}' header: Prefer: return=minimal conditions: is: code: 415 #put customercontact with unsupported content type - name: PUT customercontact with unsupported Content-Type type: item method: PUT path: '/${customercontact1_path}' header: Content-Type: application/xxx conditions: is: code: 415 #put customercontact with missing body - name: PUT customercontact with missing body type: item method: PUT path: '/${customercontact1_path}' header: Content-Type: application/json Prefer: return=representation conditions: is: code: 400 #put customercontact - name: PUT customercontact type: item method: PUT path: '/${customercontact1_path}' header: Content-Type: application/json Prefer: return=representation content: '${customercontact}' retain: new_customercontact: body perl_code: !!perl/code | { my ($retained) = @_; delete $retained->{new_customercontact}->{_links}; delete $retained->{new_customercontact}->{_embedded}; } conditions: is: code: 200 is_deeply: '${customercontact}': ${new_customercontact} #PATCH customercontact firstname - name: PATCH customercontact firstname type: item method: PATCH path: '/${customercontact1_path}' header: Content-Type: application/json-patch+json Prefer: return=representation content: - op: replace path: /firstname value: patchedfirst retain: modified_customercontact: body conditions: is: code: 200 '${modified_customercontact}.firstname': patchedfirst #PATCH customercontact firstname - name: PATCH customercontact firstname type: item method: PATCH path: '/${customercontact1_path}' header: Content-Type: application/json-patch+json Prefer: return=representation content: - op: replace path: /firstname value: null retain: modified_customercontact: body conditions: is: code: 200 ok: '${modified_customercontact}.firstname': undefined #PATCH customercontact with undefined email - name: PATCH customercontact with undefined email type: item method: PATCH path: '/${customercontact1_path}' header: Content-Type: application/json-patch+json Prefer: return=representation content: - op: replace path: /email value: null retain: modified_customercontact: body conditions: is: code: 422 #PATCH customercontact with undefined reseller_id - name: PATCH customercontact with undefined reseller_id type: item method: PATCH path: '/${customercontact1_path}' header: Content-Type: application/json-patch+json Prefer: return=representation content: - op: replace path: /reseller_id value: null retain: modified_customercontact: body conditions: is: code: 422 #PATCH customercontact with invalid reseller_id - name: PATCH customercontact with invalid reseller_id type: item method: PATCH path: '/${customercontact1_path}' header: Content-Type: application/json-patch+json Prefer: return=representation content: - op: replace path: /reseller_id value: 99999 retain: modified_customercontact: body conditions: is: code: 422 #DELETE customercontact - name: DELETE customercontact type: item method: DELETE path: '/${customercontact1_path}' conditions: is: code: 204 #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 retain: domain_path: header.location conditions: is: code: 201 #get test domain - name: get test domain type: item method: GET path: '/${domain_path}' retain: domain: body conditions: is: code: 200 #create test billingprofile - name: create test billingprofile type: item method: POST path: '/api/billingprofiles/' header: Content-Type: application/json content: name: test profile ${unique_id} handle: testprofile${unique_id} reseller_id: 1 retain: billingprofile_id: header.location conditions: is: code: 201 #create CustomerContact - name: include create CustomerContact type: include file: CreateCustomerContact.yaml perl_code: !!perl/code | { my ($retained) = @_; $retained->{customercontact_content} = { firstname => "cust_contact_first", lastname => "cust_contact_last", email => "cust_contact\@custcontact.invalid", reseller_id => 1, }; } #create Customer - name: include create Customer type: include file: CreateCustomer.yaml perl_code: !!perl/code | { my ($retained) = @_; $retained->{subscriber_map} = (); $retained->{customer_map} = (); $retained->{customer_content} = { status => 'active', contact_id => $retained->{customercontact_id}, billing_profile_id => $retained->{billingprofile_id}, type => 'sipaccount', max_subscribers => undef, external_id => undef }; } #DELETE customercontact - name: DELETE customercontact type: item method: DELETE path: '/${customercontact_path}' conditions: is: code: 423 #get customercontact - name: get customercontact type: item method: GET path: '/${customercontact_path}' conditions: is: code: 200 #PATCH customer status - name: PATCH customer status type: item method: PATCH path: '/${customer_path}' header: Content-Type: application/json-patch+json Prefer: return=representation content: - op: replace path: /status value: terminated conditions: is: code: 200 #DELETE customercontact - name: DELETE customercontact type: item method: DELETE path: '/${customercontact_path}' conditions: is: code: 204 #get customercontact - name: get customercontact type: item method: GET path: '/${customercontact_path}' conditions: is: code: 404