|
7 | 7 | let(:org) { space.organization } |
8 | 8 | let(:admin_header) { headers_for(user, scopes: %w(cloud_controller.admin)) } |
9 | 9 | let(:user_header) { headers_for(user, scopes: []) } |
| 10 | + let(:routing_api_client) { instance_double(VCAP::CloudController::RoutingApi::Client) } |
| 11 | + let(:router_group) { instance_double(VCAP::CloudController::RoutingApi::RouterGroup) } |
10 | 12 |
|
11 | 13 | before do |
12 | 14 | VCAP::CloudController::Domain.dataset.destroy # this will clean up the seeded test domains |
| 15 | + allow(VCAP::CloudController::RoutingApi::Client).to receive(:new).and_return(routing_api_client) |
| 16 | + allow(routing_api_client).to receive(:router_group).with('some-router-guid').and_return router_group |
| 17 | + allow(routing_api_client).to receive(:router_group).with('some-other-router-guid').and_return nil |
13 | 18 | end |
14 | 19 |
|
15 | 20 | describe 'GET /v3/domains' do |
|
66 | 71 | updated_at: iso8601, |
67 | 72 | name: visible_owned_private_domain.name, |
68 | 73 | internal: false, |
| 74 | + router_group: nil, |
69 | 75 | metadata: { |
70 | 76 | labels: {}, |
71 | 77 | annotations: {} |
|
94 | 100 | updated_at: iso8601, |
95 | 101 | name: visible_shared_private_domain.name, |
96 | 102 | internal: false, |
| 103 | + router_group: nil, |
97 | 104 | metadata: { |
98 | 105 | labels: {}, |
99 | 106 | annotations: {} |
|
122 | 129 | updated_at: iso8601, |
123 | 130 | name: not_visible_private_domain.name, |
124 | 131 | internal: false, |
| 132 | + router_group: nil, |
125 | 133 | metadata: { |
126 | 134 | labels: {}, |
127 | 135 | annotations: {} |
|
150 | 158 | updated_at: iso8601, |
151 | 159 | name: shared_domain.name, |
152 | 160 | internal: false, |
| 161 | + router_group: nil, |
153 | 162 | metadata: { |
154 | 163 | labels: {}, |
155 | 164 | annotations: {} |
|
732 | 741 | end |
733 | 742 |
|
734 | 743 | describe 'when creating a shared domain' do |
735 | | - let(:api_call) { lambda { |user_headers| post '/v3/domains', params.to_json, user_headers } } |
| 744 | + let(:api_call) { lambda { |user_headers| post '/v3/domains', domain_params.to_json, user_headers } } |
| 745 | + |
| 746 | + let(:domain_params) do |
| 747 | + { |
| 748 | + router_group: { guid: 'some-router-guid' }, |
| 749 | + }.merge(params) |
| 750 | + end |
736 | 751 |
|
737 | 752 | let(:domain_json) do |
738 | 753 | { |
739 | | - guid: UUID_REGEX, |
740 | | - created_at: iso8601, |
741 | | - updated_at: iso8601, |
742 | | - name: params[:name], |
743 | | - internal: false, |
744 | | - metadata: { |
745 | | - labels: { key: 'value' }, |
746 | | - annotations: { key2: 'value2' } |
747 | | - }, |
748 | | - relationships: { |
749 | | - organization: { |
750 | | - data: nil |
751 | | - }, |
752 | | - shared_organizations: { |
753 | | - data: [] |
754 | | - } |
| 754 | + guid: UUID_REGEX, |
| 755 | + created_at: iso8601, |
| 756 | + updated_at: iso8601, |
| 757 | + name: params[:name], |
| 758 | + internal: false, |
| 759 | + router_group: { guid: 'some-router-guid' }, |
| 760 | + metadata: { |
| 761 | + labels: { key: 'value' }, |
| 762 | + annotations: { key2: 'value2' } |
| 763 | + }, |
| 764 | + relationships: { |
| 765 | + organization: { |
| 766 | + data: nil |
755 | 767 | }, |
756 | | - links: { |
757 | | - self: { href: %r(#{Regexp.escape(link_prefix)}\/v3\/domains\/#{UUID_REGEX}) }, |
758 | | - route_reservations: { href: %r(#{Regexp.escape(link_prefix)}\/v3/domains/#{UUID_REGEX}/route_reservations) }, |
| 768 | + shared_organizations: { |
| 769 | + data: [] |
| 770 | + } |
| 771 | + }, |
| 772 | + links: { |
| 773 | + self: { href: %r(#{Regexp.escape(link_prefix)}\/v3\/domains\/#{UUID_REGEX}) }, |
| 774 | + route_reservations: { href: %r(#{Regexp.escape(link_prefix)}\/v3/domains/#{UUID_REGEX}/route_reservations) }, |
759 | 775 | } |
760 | 776 | } |
761 | 777 | end |
|
785 | 801 | updated_at: iso8601, |
786 | 802 | name: params[:name], |
787 | 803 | internal: false, |
| 804 | + router_group: nil, |
788 | 805 | metadata: { |
789 | 806 | labels: { key: 'value' }, |
790 | 807 | annotations: { key2: 'value2' } |
|
1070 | 1087 | expect(parsed_response['errors'][0]['detail']).to eq 'Relationships cannot contain shared_organizations without an owning organization.' |
1071 | 1088 | end |
1072 | 1089 | end |
| 1090 | + |
| 1091 | + context 'when a router group is provided' do |
| 1092 | + let(:params) do |
| 1093 | + { |
| 1094 | + name: 'my-domain.biz', |
| 1095 | + router_group: { guid: 'some-router-guid' }, |
| 1096 | + relationships: { |
| 1097 | + organization: { |
| 1098 | + data: { |
| 1099 | + guid: org.guid |
| 1100 | + } |
| 1101 | + } |
| 1102 | + } |
| 1103 | + } |
| 1104 | + end |
| 1105 | + |
| 1106 | + it 'returns a 422 and a helpful error message' do |
| 1107 | + post '/v3/domains', params.to_json, headers |
| 1108 | + |
| 1109 | + expect(last_response.status).to eq(422) |
| 1110 | + |
| 1111 | + expect(parsed_response['errors'][0]['detail']).to eq 'Domains scoped to an organization cannot be associated to a router group.' |
| 1112 | + end |
| 1113 | + end |
1073 | 1114 | end |
1074 | 1115 | end |
1075 | 1116 |
|
|
1225 | 1266 | expect(last_response.status).to eq 201 |
1226 | 1267 | end |
1227 | 1268 | end |
| 1269 | + |
| 1270 | + describe 'when specifying a router group that does not exist' do |
| 1271 | + let(:user_header) { admin_headers_for(user) } |
| 1272 | + let(:domain_params) do |
| 1273 | + { |
| 1274 | + name: 'my-domain.com', |
| 1275 | + router_group: { guid: 'some-other-router-guid' }, |
| 1276 | + } |
| 1277 | + end |
| 1278 | + |
| 1279 | + it 'returns a 422 and a helpful error message' do |
| 1280 | + post '/v3/domains', domain_params.to_json, user_header |
| 1281 | + |
| 1282 | + expect(last_response.status).to eq(422) |
| 1283 | + |
| 1284 | + expect(parsed_response['errors'][0]['detail']).to eq "Router group with guid 'some-other-router-guid' not found." |
| 1285 | + end |
| 1286 | + end |
| 1287 | + |
| 1288 | + describe 'when specifying a router group with internal: true' do |
| 1289 | + let(:user_header) { admin_headers_for(user) } |
| 1290 | + let(:domain_params) do |
| 1291 | + { |
| 1292 | + name: 'my-domain.com', |
| 1293 | + internal: true, |
| 1294 | + router_group: { guid: 'some-router-guid' }, |
| 1295 | + } |
| 1296 | + end |
| 1297 | + |
| 1298 | + it 'returns a 422 and a helpful error message' do |
| 1299 | + post '/v3/domains', domain_params.to_json, user_header |
| 1300 | + |
| 1301 | + expect(last_response.status).to eq(422) |
| 1302 | + |
| 1303 | + expect(parsed_response['errors'][0]['detail']).to eq 'Internal domains cannot be associated to a router group.' |
| 1304 | + end |
| 1305 | + end |
1228 | 1306 | end |
1229 | 1307 |
|
1230 | 1308 | describe 'POST /v3/domains/:guid/relationships/shared_organizations' do |
|
1667 | 1745 | updated_at: iso8601, |
1668 | 1746 | name: shared_domain.name, |
1669 | 1747 | internal: false, |
| 1748 | + router_group: nil, |
1670 | 1749 | metadata: { |
1671 | 1750 | labels: {}, |
1672 | 1751 | annotations: {} |
|
1710 | 1789 | updated_at: iso8601, |
1711 | 1790 | name: private_domain.name, |
1712 | 1791 | internal: false, |
| 1792 | + router_group: nil, |
1713 | 1793 | metadata: { |
1714 | 1794 | labels: {}, |
1715 | 1795 | annotations: {} |
|
1769 | 1849 | updated_at: iso8601, |
1770 | 1850 | name: private_domain.name, |
1771 | 1851 | internal: false, |
| 1852 | + router_group: nil, |
1772 | 1853 | metadata: { |
1773 | 1854 | labels: {}, |
1774 | 1855 | annotations: {} |
|
1865 | 1946 | updated_at: iso8601, |
1866 | 1947 | name: domain.name, |
1867 | 1948 | internal: false, |
| 1949 | + router_group: nil, |
1868 | 1950 | relationships: { |
1869 | 1951 | organization: { |
1870 | 1952 | data: nil |
|
1916 | 1998 | updated_at: iso8601, |
1917 | 1999 | name: domain.name, |
1918 | 2000 | internal: false, |
| 2001 | + router_group: nil, |
1919 | 2002 | relationships: { |
1920 | 2003 | organization: { |
1921 | 2004 | data: { guid: org.guid } |
|
1972 | 2055 | updated_at: iso8601, |
1973 | 2056 | name: domain.name, |
1974 | 2057 | internal: false, |
| 2058 | + router_group: nil, |
1975 | 2059 | relationships: { |
1976 | 2060 | organization: { |
1977 | 2061 | data: { guid: domain.owning_organization_guid } |
|
0 commit comments