Skip to content

Commit ddcc6f6

Browse files
committed
test: cover PATCH /voice_out_trunks/:id emergency_dids + emergency_enable_all
Three wire-level specs for the 2026-04-16 emergency trunk attributes: * toggle emergency_enable_all (boolean attribute) * replace emergency_dids to-many with a specific two-DID set * clear emergency_dids with data: []
1 parent 651f702 commit ddcc6f6

4 files changed

Lines changed: 96 additions & 0 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
interactions:
2+
- request:
3+
body: '{"data":{"id":"01234567-89ab-cdef-0123-456789abcdef","type":"voice_out_trunks","attributes":{},"relationships":{"emergency_dids":{"data":[]}}}}'
4+
headers:
5+
Accept:
6+
- application/vnd.api+json
7+
Api-Key:
8+
- test-api-key
9+
Content-Type:
10+
- application/vnd.api+json
11+
method: PATCH
12+
uri: https://sandbox-api.didww.com/v3/voice_out_trunks/01234567-89ab-cdef-0123-456789abcdef
13+
response:
14+
body:
15+
string: '{"data":{"id":"01234567-89ab-cdef-0123-456789abcdef","type":"voice_out_trunks","attributes":{"name":"Trunk with emergency DIDs","on_cli_mismatch_action":"replace_cli","capacity_limit":200,"created_at":"2026-01-15T10:00:00.000Z","allow_any_did_as_cli":false,"status":"active","threshold_reached":false,"threshold_amount":"100.0","default_dst_action":"allow_all","dst_prefixes":["1"],"media_encryption_mode":"disabled","callback_url":null,"force_symmetric_rtp":false,"allowed_rtp_ips":[],"emergency_enable_all":false,"rtp_timeout":30,"authentication_method":{"type":"credentials_and_ip","attributes":{"allowed_sip_ips":["10.0.0.1/32"],"tech_prefix":"","username":"user1","password":"pass1"}}},"relationships":{"emergency_dids":{"links":{"self":"https://sandbox-api.didww.com/v3/voice_out_trunks/01234567-89ab-cdef-0123-456789abcdef/relationships/emergency_dids","related":"https://sandbox-api.didww.com/v3/voice_out_trunks/01234567-89ab-cdef-0123-456789abcdef/emergency_dids"}}}},"meta":{"api_version":"2026-04-16"}}'
16+
headers:
17+
Content-Type:
18+
- application/vnd.api+json
19+
status:
20+
code: 200
21+
message: OK
22+
version: 1
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
interactions:
2+
- request:
3+
body: '{"data":{"id":"01234567-89ab-cdef-0123-456789abcdef","type":"voice_out_trunks","attributes":{},"relationships":{"emergency_dids":{"data":[{"type":"dids","id":"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"},{"type":"dids","id":"bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"}]}}}}'
4+
headers:
5+
Accept:
6+
- application/vnd.api+json
7+
Api-Key:
8+
- test-api-key
9+
Content-Type:
10+
- application/vnd.api+json
11+
method: PATCH
12+
uri: https://sandbox-api.didww.com/v3/voice_out_trunks/01234567-89ab-cdef-0123-456789abcdef
13+
response:
14+
body:
15+
string: '{"data":{"id":"01234567-89ab-cdef-0123-456789abcdef","type":"voice_out_trunks","attributes":{"name":"Trunk with emergency DIDs","on_cli_mismatch_action":"replace_cli","capacity_limit":200,"created_at":"2026-01-15T10:00:00.000Z","allow_any_did_as_cli":false,"status":"active","threshold_reached":false,"threshold_amount":"100.0","default_dst_action":"allow_all","dst_prefixes":["1"],"media_encryption_mode":"disabled","callback_url":null,"force_symmetric_rtp":false,"allowed_rtp_ips":[],"emergency_enable_all":false,"rtp_timeout":30,"authentication_method":{"type":"credentials_and_ip","attributes":{"allowed_sip_ips":["10.0.0.1/32"],"tech_prefix":"","username":"user1","password":"pass1"}}},"relationships":{"emergency_dids":{"links":{"self":"https://sandbox-api.didww.com/v3/voice_out_trunks/01234567-89ab-cdef-0123-456789abcdef/relationships/emergency_dids","related":"https://sandbox-api.didww.com/v3/voice_out_trunks/01234567-89ab-cdef-0123-456789abcdef/emergency_dids"}}}},"meta":{"api_version":"2026-04-16"}}'
16+
headers:
17+
Content-Type:
18+
- application/vnd.api+json
19+
status:
20+
code: 200
21+
message: OK
22+
version: 1
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
interactions:
2+
- request:
3+
body: '{"data":{"id":"01234567-89ab-cdef-0123-456789abcdef","type":"voice_out_trunks","attributes":{"emergency_enable_all":true}}}'
4+
headers:
5+
Accept:
6+
- application/vnd.api+json
7+
Api-Key:
8+
- test-api-key
9+
Content-Type:
10+
- application/vnd.api+json
11+
method: PATCH
12+
uri: https://sandbox-api.didww.com/v3/voice_out_trunks/01234567-89ab-cdef-0123-456789abcdef
13+
response:
14+
body:
15+
string: '{"data":{"id":"01234567-89ab-cdef-0123-456789abcdef","type":"voice_out_trunks","attributes":{"name":"Trunk with emergency","on_cli_mismatch_action":"replace_cli","capacity_limit":200,"created_at":"2026-01-15T10:00:00.000Z","allow_any_did_as_cli":false,"status":"active","threshold_reached":false,"threshold_amount":"100.0","default_dst_action":"allow_all","dst_prefixes":["1"],"media_encryption_mode":"disabled","callback_url":null,"force_symmetric_rtp":false,"allowed_rtp_ips":[],"emergency_enable_all":true,"rtp_timeout":30,"authentication_method":{"type":"credentials_and_ip","attributes":{"allowed_sip_ips":["10.0.0.1/32"],"tech_prefix":"","username":"user1","password":"pass1"}}},"relationships":{"default_did":{"links":{"self":"https://sandbox-api.didww.com/v3/voice_out_trunks/01234567-89ab-cdef-0123-456789abcdef/relationships/default_did","related":"https://sandbox-api.didww.com/v3/voice_out_trunks/01234567-89ab-cdef-0123-456789abcdef/default_did"}}}},"meta":{"api_version":"2026-04-16"}}'
16+
headers:
17+
Content-Type:
18+
- application/vnd.api+json
19+
status:
20+
code: 200
21+
message: OK
22+
version: 1

tests/resources/test_voice_out_trunk.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,36 @@ def test_emergency_dids_relationship(self):
109109
assert hasattr(trunk, 'emergency_dids')
110110

111111

112+
class TestVoiceOutTrunkEmergencyPatch:
113+
@my_vcr.use_cassette("voice_out_trunks/update_emergency_enable_all.yaml")
114+
def test_toggle_emergency_enable_all(self, client):
115+
trunk = VoiceOutTrunk.build("01234567-89ab-cdef-0123-456789abcdef")
116+
trunk.emergency_enable_all = True
117+
response = client.voice_out_trunks().update(trunk)
118+
updated = response.data
119+
assert updated.id == "01234567-89ab-cdef-0123-456789abcdef"
120+
assert updated.emergency_enable_all is True
121+
122+
@my_vcr.use_cassette("voice_out_trunks/update_emergency_dids.yaml")
123+
def test_replace_emergency_dids(self, client):
124+
trunk = VoiceOutTrunk.build("01234567-89ab-cdef-0123-456789abcdef")
125+
trunk.emergency_dids = [
126+
Did.build("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"),
127+
Did.build("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"),
128+
]
129+
response = client.voice_out_trunks().update(trunk)
130+
updated = response.data
131+
assert updated.id == "01234567-89ab-cdef-0123-456789abcdef"
132+
133+
@my_vcr.use_cassette("voice_out_trunks/update_clear_emergency_dids.yaml")
134+
def test_clear_emergency_dids(self, client):
135+
trunk = VoiceOutTrunk.build("01234567-89ab-cdef-0123-456789abcdef")
136+
trunk.emergency_dids = []
137+
response = client.voice_out_trunks().update(trunk)
138+
updated = response.data
139+
assert updated.id == "01234567-89ab-cdef-0123-456789abcdef"
140+
141+
112142
class TestAuthenticationMethodPolymorphism:
113143
def test_from_jsonapi_ip_only(self):
114144
data = {"type": "ip_only", "attributes": {"allowed_sip_ips": ["1.2.3.4/32"], "tech_prefix": "123"}}

0 commit comments

Comments
 (0)