|
48 | 48 | let(:existing_target_datasets_list) {[]}
|
49 | 49 |
|
50 | 50 | # initial json metadata settings will be copied to the new dashboard and requires updating
|
51 |
| - let(:json_metadata_initial_settings) do |
| 51 | + let(:json_metadata_initial_settings) do |
52 | 52 | {
|
53 | 53 | "chart_configuration"=>
|
54 | 54 | { "#{source_chart_1}"=>{"id"=>source_chart_1, "crossFilters"=>{"scope"=>"global", "chartsInScope"=>[source_chart_2]}},
|
|
70 | 70 | end
|
71 | 71 |
|
72 | 72 | # expected json metadata settings after the new dashboard is created and json is updated
|
73 |
| - let(:json_metadata_updated_settings) do |
| 73 | + let(:json_metadata_updated_settings) do |
74 | 74 | {
|
75 | 75 | "chart_configuration"=>
|
76 | 76 | { "#{new_chart_1}"=>{"id"=>new_chart_1, "crossFilters"=>{"scope"=>"global", "chartsInScope"=>[new_chart_2]}},
|
|
141 | 141 | context 'with stardard json metadata ids' do
|
142 | 142 | specify do
|
143 | 143 | expect(subject.new_dashboard_json_metadata_configuration).to eq(json_metadata_initial_settings)
|
144 |
| - subject.perform |
| 144 | + subject.perform |
145 | 145 | expect(subject.new_dashboard_json_metadata_configuration).to eq(json_metadata_updated_settings)
|
146 | 146 | end
|
147 | 147 | end
|
148 | 148 |
|
149 | 149 | context 'with non stardard json metadata ids to confirm gsub' do
|
150 | 150 | let(:source_chart_1) { 11 }
|
151 | 151 | let(:source_chart_2) { 1111 }
|
152 |
| - let(:json_metadata_initial_settings) do |
| 152 | + let(:json_metadata_initial_settings) do |
153 | 153 | {
|
154 | 154 | "chart_configuration"=>
|
155 | 155 | { "#{source_chart_1}"=>{"id"=>source_chart_1, "crossFilters"=>{"scope"=>"global", "chartsInScope"=>[source_chart_2]}} ,
|
|
161 | 161 |
|
162 | 162 | let(:new_chart_1) { 222 }
|
163 | 163 | let(:new_chart_2) { 22222 }
|
164 |
| - let!(:json_metadata_updated_settings) do |
| 164 | + let!(:json_metadata_updated_settings) do |
165 | 165 | {
|
166 | 166 | "chart_configuration"=>
|
167 | 167 | { "#{new_chart_1}"=>{"id"=>new_chart_1, "crossFilters"=>{"scope"=>"global", "chartsInScope"=>[new_chart_2]}} ,
|
|
173 | 173 |
|
174 | 174 | specify do
|
175 | 175 | expect(subject.new_dashboard_json_metadata_configuration).to eq(json_metadata_initial_settings)
|
176 |
| - subject.perform |
| 176 | + subject.perform |
177 | 177 | expect(subject.new_dashboard_json_metadata_configuration).to eq(json_metadata_updated_settings)
|
178 | 178 | end
|
179 | 179 | end
|
180 | 180 | end
|
181 |
| - |
182 | 181 | end
|
183 | 182 |
|
184 | 183 | context 'and embedded domains' do
|
|
289 | 288 | end
|
290 | 289 | end
|
291 | 290 |
|
292 |
| - context 'filters set is outside source schema' do |
| 291 | + context 'one filters dataset schema not matching the source dashboards schema' do |
293 | 292 | let(:target_schema) { 'schema_two' }
|
294 |
| - let(:source_dashboard_filter_dataset_ids) { [101, 202] } |
| 293 | + let(:invalid_filter_dataset_id) { 404 } |
| 294 | + let(:invalid_filter_dataset_schema) { 'schema_four' } |
| 295 | + let(:source_dashboard_filter_dataset_ids) { [101, invalid_filter_dataset_id] } |
295 | 296 |
|
296 | 297 | specify do
|
297 |
| - expect { subject.perform }.to raise_error(Superset::Request::ValidationError, "One or more source dashboard filters point to a different dataset than the dashboard charts. Identified Unpermittied Filter Dataset Ids are [202]") |
| 298 | + # additional filter checks for validations on unpermitted_filter_dataset_ids |
| 299 | + expect(Superset::Dataset::Get).to receive(:new).with(invalid_filter_dataset_id).and_return(double(schema: invalid_filter_dataset_schema)) |
| 300 | + |
| 301 | + expect { subject.perform }.to raise_error(Superset::Request::ValidationError, |
| 302 | + "One or more source dashboard filters point to a different schema than the dashboard charts. " \ |
| 303 | + "Identified Unpermittied Filter Dataset Ids are " \ |
| 304 | + "[{:filter_dataset_id=>#{invalid_filter_dataset_id}, :filter_schema=>\"#{invalid_filter_dataset_schema}\"}]") |
| 305 | + end |
| 306 | + end |
| 307 | + |
| 308 | + context 'more than one filters dataset schema not matching the source dashboards schema' do |
| 309 | + let(:target_schema) { 'schema_two' } |
| 310 | + let(:invalid_filter_dataset_id) { 404 } |
| 311 | + let(:invalid_filter_dataset_schema) { 'schema_four' } |
| 312 | + let(:invalid_filter_dataset_id_2) { 505 } |
| 313 | + let(:invalid_filter_dataset_schema_2) { 'schema_five' } |
| 314 | + let(:source_dashboard_filter_dataset_ids) { [101, invalid_filter_dataset_id, invalid_filter_dataset_id_2] } |
| 315 | + |
| 316 | + specify do |
| 317 | + # additional filter checks for validations on unpermitted_filter_dataset_ids |
| 318 | + expect(Superset::Dataset::Get).to receive(:new).with(invalid_filter_dataset_id).and_return(double(schema: invalid_filter_dataset_schema)) |
| 319 | + expect(Superset::Dataset::Get).to receive(:new).with(invalid_filter_dataset_id_2).and_return(double(schema: invalid_filter_dataset_schema_2)) |
| 320 | + |
| 321 | + expect { subject.perform }.to raise_error(Superset::Request::ValidationError, |
| 322 | + "One or more source dashboard filters point to a different schema than the dashboard charts. " \ |
| 323 | + "Identified Unpermittied Filter Dataset Ids are " \ |
| 324 | + "[{:filter_dataset_id=>#{invalid_filter_dataset_id}, :filter_schema=>\"#{invalid_filter_dataset_schema}\"}, " \ |
| 325 | + "{:filter_dataset_id=>#{invalid_filter_dataset_id_2}, :filter_schema=>\"#{invalid_filter_dataset_schema_2}\"}]") |
298 | 326 | end
|
299 | 327 | end
|
300 | 328 |
|
|
311 | 339 | context 'target schema already has matching dataset names' do
|
312 | 340 | let(:existing_target_datasets_list) {[ 'Dataset 1 (COPY)', 'Dataset 2 (COPY)' ]}
|
313 | 341 | specify do
|
314 |
| - expect { subject.perform }.to raise_error(Superset::Request::ValidationError, |
| 342 | + expect { subject.perform }.to raise_error(Superset::Request::ValidationError, |
315 | 343 | "DATASET NAME CONFLICT: The Target Schema schema_two already has existing datasets named: Dataset 1 (COPY),Dataset 2 (COPY)")
|
316 | 344 | end
|
317 | 345 | end
|
|
0 commit comments