|
78 | 78 | expect(data_file[:path]).to eq('234') |
79 | 79 | expect(data_file[:dataFile]).to be true |
80 | 80 | end |
| 81 | + |
| 82 | + it 'should include disabled plans in list' do |
| 83 | + project = Hailstorm::Model::Project.create!(project_code: 'api_jmeter_plans_spec') |
| 84 | + hailstorm_config = Hailstorm::Support::Configuration.new |
| 85 | + hailstorm_config.jmeter do |jmeter| |
| 86 | + jmeter.add_test_plan('123/a.jmx') |
| 87 | + jmeter.properties(test_plan: '123/a.jmx') do |map| |
| 88 | + map['NumUsers'] = '100' |
| 89 | + end |
| 90 | + |
| 91 | + jmeter.add_test_plan('124/b.jmx') |
| 92 | + jmeter.properties(test_plan: '124/b.jmx') do |map| |
| 93 | + map['NumUsers'] = '20' |
| 94 | + end |
| 95 | + |
| 96 | + jmeter.disabled_test_plans.push('124/b') |
| 97 | + jmeter.data_files = %w[234/foo.csv] |
| 98 | + end |
| 99 | + |
| 100 | + ProjectConfiguration.create!(project_id: project.id, stringified_config: deep_encode(hailstorm_config)) |
| 101 | + |
| 102 | + @browser.get("/projects/#{project.id}/jmeter_plans") |
| 103 | + expect(@browser.last_response).to be_ok |
| 104 | + # @type [Array<Hash>] res |
| 105 | + res = JSON.parse(@browser.last_response.body) |
| 106 | + expect(res.size).to eq(3) |
| 107 | + expect(res.first.symbolize_keys[:name]).to eq('a.jmx') |
| 108 | + |
| 109 | + jmeter_plan = res[1].symbolize_keys |
| 110 | + expect(jmeter_plan[:name]).to eq('b.jmx') |
| 111 | + expect(jmeter_plan[:disabled]).to be == true |
| 112 | + |
| 113 | + data_file = res[2].symbolize_keys |
| 114 | + expect(data_file[:name]).to eq('foo.csv') |
| 115 | + expect(data_file[:dataFile]).to be true |
| 116 | + end |
81 | 117 | end |
82 | 118 |
|
83 | 119 | context 'PATCH /projects/:project_id/jmeter_plans/:id' do |
|
110 | 146 | @browser.patch("/projects/#{project.id}/jmeter_plans/#{post_res[:id]}", JSON.dump(patch_params)) |
111 | 147 | expect(@browser.last_response).to be_ok |
112 | 148 | patch_res = JSON.parse(@browser.last_response.body).symbolize_keys |
113 | | - expect(patch_res.keys.sort).to eq(%i[name path properties id].sort) |
| 149 | + expect(patch_res.keys.sort).to eq(%i[name path properties id planExecutedBefore].sort) |
114 | 150 | expect(patch_res[:id]).to eq(post_res[:id]) |
115 | 151 | expect(patch_res[:properties].to_h).to eq(patch_params[:properties].to_h) |
116 | 152 | end |
| 153 | + |
| 154 | + it 'should disable a test plan' do |
| 155 | + project = Hailstorm::Model::Project.create!(project_code: 'api_jmeter_plans_spec') |
| 156 | + params = { |
| 157 | + name: 'hailstorm.jmx', |
| 158 | + path: '1234', |
| 159 | + properties: [ |
| 160 | + %w[NumUsers 10], |
| 161 | + %w[RampUp 30], |
| 162 | + %w[Duration 180], |
| 163 | + %w[ServerName 152.36.34.28] |
| 164 | + ] |
| 165 | + } |
| 166 | + |
| 167 | + @browser.post("/projects/#{project.id}/jmeter_plans", JSON.dump(params)) |
| 168 | + expect(@browser.last_response).to be_ok |
| 169 | + post_res = JSON.parse(@browser.last_response.body).symbolize_keys |
| 170 | + |
| 171 | + patch_params = { disabled: true } |
| 172 | + @browser.patch("/projects/#{project.id}/jmeter_plans/#{post_res[:id]}", JSON.dump(patch_params)) |
| 173 | + expect(@browser.last_response).to be_ok |
| 174 | + patch_res = JSON.parse(@browser.last_response.body).symbolize_keys |
| 175 | + expect(patch_res.keys.sort).to eq(%i[name path properties id disabled planExecutedBefore].sort) |
| 176 | + expect(patch_res[:id]).to eq(post_res[:id]) |
| 177 | + expect(patch_res[:properties].to_h).to eq(params[:properties].to_h) |
| 178 | + expect(patch_res[:disabled]).to eql(true) |
| 179 | + end |
| 180 | + |
| 181 | + it 'should enable a previously disabled test plan' do |
| 182 | + project = Hailstorm::Model::Project.create!(project_code: 'api_jmeter_plans_spec') |
| 183 | + params = { |
| 184 | + name: 'hailstorm.jmx', |
| 185 | + path: '1234', |
| 186 | + properties: [ |
| 187 | + %w[NumUsers 10], |
| 188 | + %w[RampUp 30], |
| 189 | + %w[Duration 180], |
| 190 | + %w[ServerName 152.36.34.28] |
| 191 | + ] |
| 192 | + } |
| 193 | + |
| 194 | + @browser.post("/projects/#{project.id}/jmeter_plans", JSON.dump(params)) |
| 195 | + expect(@browser.last_response).to be_ok |
| 196 | + post_res = JSON.parse(@browser.last_response.body).symbolize_keys |
| 197 | + @browser.patch("/projects/#{project.id}/jmeter_plans/#{post_res[:id]}", JSON.dump({ disabled: true })) |
| 198 | + expect(@browser.last_response).to be_ok |
| 199 | + |
| 200 | + @browser.patch("/projects/#{project.id}/jmeter_plans/#{post_res[:id]}", JSON.dump({ disabled: false })) |
| 201 | + expect(@browser.last_response).to be_ok |
| 202 | + patch_res = JSON.parse(@browser.last_response.body).symbolize_keys |
| 203 | + expect(patch_res[:disabled]).to be_nil |
| 204 | + expect(patch_res[:properties].to_h).to eq(params[:properties].to_h) |
| 205 | + end |
117 | 206 | end |
118 | 207 |
|
119 | 208 | context 'DELETE /projects/:project_id/jmeter_plans/:id' do |
|
177 | 266 | expect(updated_hailstorm_config.jmeter.test_plans.size).to eq(1) |
178 | 267 | expect(updated_hailstorm_config.jmeter.data_files.size).to eq(0) |
179 | 268 | end |
| 269 | + |
| 270 | + it 'should not delete a test plan if it has been used in a previous test run' do |
| 271 | + allow(Hailstorm::Model::ClientStat).to receive_message_chain(:where, :count).and_return(1) |
| 272 | + mock_test_plan = double(Hailstorm::Model::JmeterPlan, id: 12) |
| 273 | + allow_any_instance_of(Hailstorm::Model::Project).to receive_message_chain(:jmeter_plans, |
| 274 | + :where).and_return([mock_test_plan]) |
| 275 | + |
| 276 | + project = Hailstorm::Model::Project.create!(project_code: 'api_jmeter_plans_spec') |
| 277 | + hailstorm_config = Hailstorm::Support::Configuration.new |
| 278 | + hailstorm_config.jmeter do |jmeter| |
| 279 | + jmeter.add_test_plan('1/a.jmx') |
| 280 | + jmeter.properties(test_plan: '1/a.jmx') do |map| |
| 281 | + map['NumUsers'] = 100 |
| 282 | + end |
| 283 | + |
| 284 | + jmeter.data_files.push('2/a.csv') |
| 285 | + end |
| 286 | + |
| 287 | + ProjectConfiguration.create!( |
| 288 | + project_id: project.id, |
| 289 | + stringified_config: deep_encode(hailstorm_config) |
| 290 | + ) |
| 291 | + |
| 292 | + id = '1/a'.to_java_string.hash_code |
| 293 | + @browser.delete("/projects/#{project.id}/jmeter_plans/#{id}") |
| 294 | + expect(@browser.last_response).to_not be_successful |
| 295 | + end |
180 | 296 | end |
181 | 297 | end |
0 commit comments