1# frozen_string_literal: true
  2
  3require "test_helper"
  4require "bandwidth_tn_order"
  5
  6class BandwidthTNOrderTest < Minitest::Test
  7	def test_create
  8		req = stub_request(
  9			:post,
 10			"https://dashboard.bandwidth.com/v1.0/accounts//orders"
 11		).with(
 12			body: {
 13				Name: "sgx-jmp order +15551234567",
 14				SiteId: "test_site",
 15				PeerId: "test_peer",
 16				CustomerOrderId: "test",
 17				ExistingTelephoneNumberOrderType: {
 18					TelephoneNumberList: {
 19						TelephoneNumber: "5551234567"
 20					}
 21				}
 22			}.to_xml(indent: 0, root: "Order")
 23		).to_return(status: 200)
 24		BandwidthTNOrder.create("+15551234567", customer_order_id: "test").sync
 25
 26		assert_requested req
 27	end
 28	em :test_create
 29
 30	def test_create_with_reservation
 31		req = stub_request(
 32			:post,
 33			"https://dashboard.bandwidth.com/v1.0/accounts//orders"
 34		).with(
 35			body: {
 36				Name: "sgx-jmp order +15551234567",
 37				SiteId: "test_site",
 38				PeerId: "test_peer",
 39				CustomerOrderId: "test",
 40				ExistingTelephoneNumberOrderType: {
 41					TelephoneNumberList: {
 42						TelephoneNumber: "5551234567"
 43					},
 44					ReservationIdList: {
 45						ReservationId: "res"
 46					}
 47				}
 48			}.to_xml(indent: 0, root: "Order")
 49		).to_return(status: 200)
 50
 51		BandwidthTNOrder.create(
 52			"+15551234567",
 53			customer_order_id: "test",
 54			reservation_id: "res"
 55		).sync
 56
 57		assert_requested req
 58	end
 59	em :test_create_with_reservation
 60
 61	def test_for_received
 62		order = BandwidthTNOrder.for(BandwidthIris::Order.new(
 63			order_status: "RECEIVED"
 64		))
 65		assert_kind_of BandwidthTNOrder::Received, order
 66	end
 67
 68	def test_for_complete
 69		order = BandwidthTNOrder.for(BandwidthIris::Order.new(
 70			order_status: "COMPLETE"
 71		))
 72		assert_kind_of BandwidthTNOrder::Complete, order
 73	end
 74
 75	def test_for_failed
 76		order = BandwidthTNOrder.for(BandwidthIris::Order.new(
 77			order_status: "FAILED"
 78		))
 79		assert_kind_of BandwidthTNOrder::Failed, order
 80	end
 81
 82	def test_for_unknown
 83		order = BandwidthTNOrder.for(BandwidthIris::Order.new(
 84			order_status: "randOmgarBagE"
 85		))
 86		assert_kind_of BandwidthTNOrder, order
 87		assert_equal :randomgarbage, order.status
 88	end
 89
 90	def test_poll
 91		order = BandwidthTNOrder.new(BandwidthIris::Order.new)
 92		assert_raises { order.poll.sync }
 93	end
 94	em :test_poll
 95
 96	class TestReceived < Minitest::Test
 97		def setup
 98			@order = BandwidthTNOrder::Received.new(
 99				BandwidthIris::Order.new(id: "oid")
100			)
101		end
102
103		def test_poll
104			req = stub_request(
105				:get,
106				"https://dashboard.bandwidth.com/v1.0/accounts//orders/oid"
107			).to_return(status: 200, body: <<~RESPONSE)
108				<OrderResponse>
109					<OrderStatus>COMPLETE</OrderStatus>
110					<CompletedNumbers>
111						<TelephoneNumber>
112							<FullNumber>5555550000</FullNumber>
113						</TelephoneNumber>
114					</CompletedNumbers>
115				</OrderResponse>
116			RESPONSE
117			@order.poll.sync
118			assert_requested req
119		end
120		em :test_poll
121	end
122
123	class TestComplete < Minitest::Test
124		def setup
125			@order = BandwidthTNOrder::Complete.new(BandwidthIris::Order.new(
126				completed_numbers: {
127					telephone_number: { full_number: "5555550000" }
128				}
129			))
130		end
131
132		def test_poll
133			assert_equal @order, @order.poll.sync
134		end
135		em :test_poll
136	end
137
138	class TestFailed < Minitest::Test
139		def setup
140			@order = BandwidthTNOrder::Failed.new(
141				BandwidthIris::Order.new(id: "oid")
142			)
143		end
144
145		def test_poll
146			assert_raises { @order.poll.sync }
147		end
148		em :test_poll
149	end
150end