You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ngcp-panel/t/api-rest2/BillingProfiles.yaml

748 lines
18 KiB

---
#check options
-
name: check OPTIONS for billingprofiles
type: item
method: OPTIONS
path: /api/billingprofiles/
conditions:
is:
code: 200
header:
Accept-Post: application/hal+json; profile=http://purl.org/sipwise/ngcp-api/#rel-billingprofiles
ok:
options:
- GET
- HEAD
- OPTIONS
- POST
#create billingprofile
-
name: create billingprofile
type: item
method: POST
path: '/api/billingprofiles/'
header:
Content-Type: application/json
content:
reseller_id: 1
handle: testapihandle1${unique_id}
name: test api name 1 ${unique_id}
retain:
billingprofile_path1: header.location
conditions:
is:
code: 201
#create billingprofile
-
name: create billingprofile
type: item
method: POST
path: '/api/billingprofiles/'
header:
Content-Type: application/json
content:
reseller_id: 1
handle: testapihandle2${unique_id}
name: test api name 2 ${unique_id}
retain:
billingprofile_path2: header.location
conditions:
is:
code: 201
#create billingprofile
-
name: create billingprofile
type: item
method: POST
path: '/api/billingprofiles/'
header:
Content-Type: application/json
content:
reseller_id: 1
handle: testapihandle3${unique_id}
name: test api name 3 ${unique_id}
retain:
billingprofile_path3: header.location
billingprofile3_id: header.location
conditions:
is:
code: 201
#test item journal link
-
name: test item journal link
type: item
method: GET
path: /${billingprofile_path3}
retain:
billingprofile: body
perl_code: !!perl/code |
{
my ($retained) = @_;
$retained->{href} = $retained->{billingprofile}->{_links}->{'ngcp:journal'}->[0]->{href};
$retained->{expected_href} = '/api/billingprofiles/'.$retained->{billingprofile3_id}.'/journal/';
}
conditions:
is:
code: 200
ok:
'${billingprofile}._links': defined
'${billingprofile}._links.ngcp:journal': defined
'${href}': '${expected_href}'
#test journal options
-
name: test journal options
type: item
method: OPTIONS
path: '/${billingprofile_path3}/journal'
conditions:
is:
code: 200
ok:
options:
- GET
- HEAD
- OPTIONS
#test journal head
-
name: test journal head
type: item
method: HEAD
path: '/${billingprofile_path3}/journal'
conditions:
is:
code: 200
#TestJournalTopJournalItem
-
name: include TestJournalTopJournalItem
type: include
file: TestJournalTopJournalItem.yaml
perl_code: !!perl/code |
{
my ($retained) = @_;
$retained->{journal_link} = '/api/billingprofiles/' . $retained->{billingprofile3_id} . '/journal/recent';
$retained->{resource} = 'billingprofiles';
$retained->{item} = $retained->{billingprofile};
$retained->{operation} = 'create';
}
#test journal options
-
name: test journal options
type: item
method: OPTIONS
path: '/${journal_item_link}'
conditions:
is:
code: 200
ok:
options:
- GET
- HEAD
- OPTIONS
#test journal head
-
name: test journal head
type: item
method: HEAD
path: '/${journal_item_link}'
conditions:
is:
code: 200
#verify pagination
-
name: verify pagination
type: pagination
method: GET
path: '/api/billingprofiles/?page=1&rows=2'
retain:
collection: body
conditions:
is:
code: 200
#create billingprofile without reseller id
-
name: create billingprofile without reseller id
type: item
method: POST
path: '/api/billingprofiles/'
header:
Content-Type: application/json
content:
handle: testapihandle
name: test api name
retain:
billingprofiles_path3: header.location
conditions:
is:
code: 422
body.code: 422
like:
body.message: field='reseller_id'
#create billingprofile with empty reseller id
-
name: create billingprofiles with empty reseller id
type: item
method: POST
path: '/api/billingprofiles/'
header:
Content-Type: application/json
content:
reseller_id: null
handle: testapihandle
name: test api name
retain:
billingprofiles_path3: header.location
conditions:
is:
code: 422
body.code: 422
like:
body.message: field='reseller_id'
#create billingprofile with invalid reseller id
-
name: create billingprofile with invalid reseller id
type: item
method: POST
path: '/api/billingprofiles/'
header:
Content-Type: application/json
content:
reseller_id: 99999
handle: testapihandle
name: test api name
retain:
billingprofiles_path3: header.location
conditions:
is:
code: 422
body.code: 422
like:
body.message: Invalid reseller
#check options for item
-
name: check OPTIONS for billingprofiles item
type: item
method: OPTIONS
path: /${billingprofile_path1}
conditions:
is:
code: 200
ok:
options:
- GET
- HEAD
- OPTIONS
- PUT
- PATCH
- DELETE
#get billingprofile
-
name: GET billingprofile
type: item
method: GET
path: /${billingprofile_path1}
retain:
billingprofile: body
perl_code: !!perl/code |
{
my ($retained) = @_;
delete $retained->{billingprofile}->{_links};
delete $retained->{billingprofile}->{_embedded};
}
conditions:
is:
code: 200
ok:
'${billingprofile}.reseller_id': defined
'${billingprofile}.handle': defined
'${billingprofile}.name': defined
#put billingprofile with missing content-type
-
name: PUT billingprofile with missing content-type
type: item
method: PUT
path: '/${billingprofile_path1}'
header:
Prefer: return=minimal
conditions:
is:
code: 415
#put billingprofile with unsupported content type
-
name: PUT billingprofile with unsupported Content-Type
type: item
method: PUT
path: '/${billingprofile_path1}'
header:
Content-Type: application/xxx
conditions:
is:
code: 415
#put billingprofile with missing body
-
name: PUT billingprofile with missing body
type: item
method: PUT
path: '/${billingprofile_path1}'
header:
Content-Type: application/json
Prefer: return=representation
conditions:
is:
code: 400
#put billingprofile
-
name: PUT billingprofile
type: item
method: PUT
path: '/${billingprofile_path1}'
header:
Content-Type: application/json
Prefer: return=representation
content: '${billingprofile}'
retain:
new_billingprofile: body
perl_code: !!perl/code |
{
my ($retained) = @_;
delete $retained->{new_billingprofile}->{_links};
delete $retained->{new_billingprofile}->{_embedded};
$retained->{patched_name} = 'patched name '.$retained->{unique_id};
}
conditions:
is:
code: 200
is_deeply:
'${billingprofile}': ${new_billingprofile}
#test item journal link
-
name: test item journal link
type: item
method: GET
path: /${billingprofile_path1}
retain:
billingprofile: body
perl_code: !!perl/code |
{
my ($retained) = @_;
$retained->{href} = $retained->{billingprofile}->{_links}->{'ngcp:journal'}->[0]->{href};
$retained->{expected_href} = '/api/billingprofiles/'.$retained->{billingprofile}->{id}.'/journal/';
}
conditions:
is:
code: 200
ok:
'${billingprofile}._links': defined
'${billingprofile}._links.ngcp:journal': defined
'${href}': '${expected_href}'
#TestJournalTopJournalItem
-
name: include TestJournalTopJournalItem
type: include
file: TestJournalTopJournalItem.yaml
perl_code: !!perl/code |
{
my ($retained) = @_;
$retained->{journal_link} = '/api/billingprofiles/' . $retained->{billingprofile}->{id} . '/journal/recent';
$retained->{resource} = 'billingprofiles';
$retained->{item} = $retained->{billingprofile};
$retained->{operation} = 'update';
}
#PATCH billingprofile name
-
name: PATCH billingprofile name
type: item
method: PATCH
path: '/${billingprofile_path1}'
header:
Content-Type: application/json-patch+json
Prefer: return=representation
content:
-
op: replace
path: /name
value: patched name ${unique_id}
retain:
modified_billingprofile: body
conditions:
is:
code: 200
'${modified_billingprofile}.name': ${patched_name}
'${modified_billingprofile}._links.self.href': ${billingprofile_path1}
'${modified_billingprofile}._links.collection.href': /api/billingprofiles/
#test item journal link
-
name: test item journal link
type: item
method: GET
path: /${billingprofile_path1}
retain:
billingprofile: body
perl_code: !!perl/code |
{
my ($retained) = @_;
$retained->{href} = $retained->{billingprofile}->{_links}->{'ngcp:journal'}->[0]->{href};
$retained->{expected_href} = '/api/billingprofiles/'.$retained->{billingprofile}->{id}.'/journal/';
}
conditions:
is:
code: 200
ok:
'${billingprofile}._links': defined
'${billingprofile}._links.ngcp:journal': defined
'${href}': '${expected_href}'
#TestJournalTopJournalItem
-
name: include TestJournalTopJournalItem
type: include
file: TestJournalTopJournalItem.yaml
perl_code: !!perl/code |
{
my ($retained) = @_;
$retained->{journal_link} = '/api/billingprofiles/' . $retained->{billingprofile}->{id} . '/journal/recent';
$retained->{resource} = 'billingprofiles';
$retained->{item} = $retained->{billingprofile};
$retained->{operation} = 'update';
}
#test journal collection
-
name: test journal collection
type: pagination
skip: 1
method: GET
path: '${journal_collection_link}'
retain:
collection: body
conditions:
is:
code: 200
#check patch with undef reseller
-
name: check patch with undef reseller
type: item
method: PATCH
path: '/${billingprofile_path1}'
header:
Content-Type: application/json-patch+json
Prefer: return=representation
content:
-
op: replace
path: /reseller_id
value: null
conditions:
is:
code: 422
#check patch with invalid reseller
-
name: check patch with invalid reseller
type: item
method: PATCH
path: '/${billingprofile_path1}'
header:
Content-Type: application/json-patch+json
Prefer: return=representation
content:
-
op: replace
path: /reseller_id
value: 99999
conditions:
is:
code: 422
#check patch prepaid
-
name: check patch prepaid
type: item
method: PATCH
path: '/${billingprofile_path1}'
header:
Content-Type: application/json-patch+json
Prefer: return=representation
content:
-
op: replace
path: /prepaid
value: 1
conditions:
is:
code: 200
#DELETE billingprofile
-
name: DELETE billingprofile
type: item
method: DELETE
path: '/${billingprofile_path1}'
conditions:
is:
code: 204
#get terminated billingprofile
-
name: GET terminated billingprofile
type: item
method: GET
path: /${billingprofile_path1}
conditions:
is:
code: 404
#create peaktimes weekday billing profile
-
name: create peaktimes weekday billing profile
type: item
method: POST
path: '/api/billingprofiles/'
header:
Content-Type: application/json
content:
reseller_id: 1
handle: peakweekdays${unique_id}
name: peak week days ${unique_id}
peaktime_weekdays:
-
weekday: 1
start: '8:00'
stop: '10:00'
-
weekday: 1
start: '10:01'
stop: '12:00'
-
weekday: 2
start: '10:00'
stop: '12:00'
retain:
peaktimes_weekday_billingprofile_path: header.location
conditions:
is:
code: 201
#get POSTed billingprofile
-
name: GET POSTed billingprofile
type: item
method: GET
path: /${peaktimes_weekday_billingprofile_path}
retain:
peaktimes_weekday_billingprofile: body
perl_code: !!perl/code |
{
my ($retained) = @_;
delete $retained->{peaktimes_weekday_billingprofile}->{_links};
delete $retained->{peaktimes_weekday_billingprofile}->{_embedded};
$retained->{malformed_profile} = {%{$retained->{peaktimes_weekday_billingprofile}}};
$retained->{malformed_profile}->{peaktime_weekdays} = [
{ weekday => 1,
start => '08:00',
stop => '10:00',
},
{ weekday => 1,
start => '10:00',
stop => '12:00',
},
];
}
conditions:
is:
code: 200
#put malformed billingprofile
-
name: PUT malformed billingprofile
type: item
method: PUT
path: '/${peaktimes_weekday_billingprofile_path}'
header:
Content-Type: application/json
Prefer: return=representation
content: '${malformed_profile}'
conditions:
is:
code: 422
like:
body.message: overlap
#put billingprofile
-
name: PUT billingprofile
type: item
method: PUT
path: '/${peaktimes_weekday_billingprofile_path}'
header:
Content-Type: application/json
Prefer: return=representation
content: '${peaktimes_weekday_billingprofile}'
retain:
new_billingprofile: body
perl_code: !!perl/code |
{
my ($retained) = @_;
delete $retained->{new_billingprofile}->{_links};
delete $retained->{new_billingprofile}->{_embedded};
}
conditions:
is:
code: 200
is_deeply:
'${peaktimes_weekday_billingprofile}': ${new_billingprofile}
#create peaktimes special billing profile
-
name: create peaktimes special billing profile
type: item
method: POST
path: '/api/billingprofiles/'
header:
Content-Type: application/json
content:
reseller_id: 1
handle: peakspecials${unique_id}
name: peak specials ${unique_id}
peaktime_special:
-
start: '2016-01-01 08:00:00'
stop: '2016-01-02 07:59:59'
-
start: '2016-01-02 08:00:00'
stop: '2016-01-02 10:00:00'
retain:
peaktimes_special_billingprofile_path: header.location
conditions:
is:
code: 201
#get POSTed billingprofile
-
name: GET POSTed billingprofile
type: item
method: GET
path: /${peaktimes_special_billingprofile_path}
retain:
peaktimes_special_billingprofile: body
perl_code: !!perl/code |
{
my ($retained) = @_;
delete $retained->{peaktimes_special_billingprofile}->{_links};
delete $retained->{peaktimes_special_billingprofile}->{_embedded};
$retained->{malformed_profile} = {%{$retained->{peaktimes_special_billingprofile}}};
$retained->{malformed_profile}->{peaktime_special} = [
{ start => '2016-01-01 08:00:00',
stop => '2016-01-02 08:00:00',
},
{ start => '2016-01-02 08:00:00',
stop => '2016-01-02 08:00:01',
},
];
}
conditions:
is:
code: 200
#put malformed billingprofile
-
name: PUT malformed billingprofile
type: item
method: PUT
path: '/${peaktimes_special_billingprofile_path}'
header:
Content-Type: application/json
Prefer: return=representation
content: '${malformed_profile}'
conditions:
is:
code: 422
like:
body.message: overlap
#put billingprofile
-
name: PUT billingprofile
type: item
method: PUT
path: '/${peaktimes_special_billingprofile_path}'
header:
Content-Type: application/json
Prefer: return=representation
content: '${peaktimes_special_billingprofile}'
retain:
new_billingprofile: body
perl_code: !!perl/code |
{
my ($retained) = @_;
delete $retained->{new_billingprofile}->{_links};
delete $retained->{new_billingprofile}->{_embedded};
}
conditions:
is:
code: 200
is_deeply:
'${peaktimes_special_billingprofile}': ${new_billingprofile}
#DELETE billingprofile
-
name: DELETE billingprofile
type: item
method: DELETE
path: '/${billingprofile_path2}'
conditions:
is:
code: 204
#DELETE billingprofile
-
name: DELETE billingprofile
type: item
method: DELETE
path: '/${billingprofile_path3}'
conditions:
is:
code: 204
#DELETE billingprofile
-
name: DELETE billingprofile
type: item
method: DELETE
path: '/${peaktimes_weekday_billingprofile_path}'
conditions:
is:
code: 204
#DELETE billingprofile
-
name: DELETE billingprofile
type: item
method: DELETE
path: '/${peaktimes_special_billingprofile_path}'
conditions:
is:
code: 204