Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 10 additions & 7 deletions app/controllers/test_results_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def create
return
end

if succeeded? && !verify_test_results(params[:results])
if succeeded? && !verify_test_results
head :unprocessable_entity
return
end
Expand All @@ -42,6 +42,7 @@ def create
addon_version_id: build.addon_version.id,
build_server: build.build_server,
canary: build.canary?,
ember_try_results: results,
output: output,
output_format: output_format,
semver_string: semver_string,
Expand Down Expand Up @@ -92,15 +93,17 @@ def succeeded?
params[:status] == 'succeeded'
end

def verify_test_results(results_str)
return false unless results_str
begin
@results = JSON.parse(results_str)
def results
@results ||= begin
JSON.parse(params[:results] || '')
rescue JSON::ParserError
return false
return nil
end
end

return false if @results['scenarios'].empty?
def verify_test_results
return false if results.nil?
return false if results['scenarios'].empty?
true
end

Expand Down
23 changes: 12 additions & 11 deletions app/models/test_result.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,18 @@
#
# Table name: test_results
#
# id :integer not null, primary key
# addon_version_id :integer
# succeeded :boolean
# status_message :string
# created_at :datetime not null
# updated_at :datetime not null
# canary :boolean default(FALSE), not null
# build_server_id :integer
# semver_string :string
# output :text
# output_format :string default("text"), not null
# id :integer not null, primary key
# addon_version_id :integer
# succeeded :boolean
# status_message :string
# created_at :datetime not null
# updated_at :datetime not null
# canary :boolean default(FALSE), not null
# build_server_id :integer
# semver_string :string
# output :text
# output_format :string default("text"), not null
# ember_try_results :jsonb
#
# Indexes
#
Expand Down
2 changes: 1 addition & 1 deletion app/resources/api/v2/test_result_resource.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

class API::V2::TestResultResource < JSONAPI::Resource
immutable
attributes :succeeded, :status_message, :created_at, :semver_string, :canary, :output, :output_format
attributes :ember_try_results, :succeeded, :status_message, :created_at, :semver_string, :canary, :output, :output_format
has_one :version, class_name: 'Version', relation_name: 'addon_version', foreign_key: 'addon_version_id'
has_many :ember_version_compatibilities

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class AddEmberTryResultsToTestResults < ActiveRecord::Migration[5.1]
def change
add_column :test_results, :ember_try_results, :jsonb
end
end
1 change: 1 addition & 0 deletions db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,7 @@
t.string "semver_string"
t.text "output"
t.string "output_format", default: "text", null: false
t.jsonb "ember_try_results"
t.index ["addon_version_id"], name: "index_test_results_on_addon_version_id"
t.index ["build_server_id"], name: "index_test_results_on_build_server_id"
end
Expand Down
43 changes: 30 additions & 13 deletions test/controllers/test_results_controller_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ class TestResultsControllerTest < ControllerTest
end

test "captures provided output from param when 'format' is 'json'" do
output = JSON.generate(foo: 'bar')
output = { foo: 'bar' }.to_json
authed_post :create, pending_build_id: @pending_build.id, format: 'json', status: 'succeeded', results: build_test_result_string(1), output: output

test_result = TestResult.find_by(addon_version_id: @pending_build.addon_version_id)
Expand All @@ -154,14 +154,23 @@ class TestResultsControllerTest < ControllerTest
end

test "saves value for 'format' param" do
output = JSON.generate(foo: 'bar')
output = { foo: 'bar' }.to_json
authed_post :create, pending_build_id: @pending_build.id, format: 'json', status: 'succeeded', results: build_test_result_string(1), output: output

test_result = TestResult.find_by(addon_version_id: @pending_build.addon_version_id)
assert_equal 'json', test_result.output_format
end

test "'retry' action responds with HTTP unauthorized if request..." do
test 'saves provided results' do
output = { foo: 'bar' }.to_json
ember_try_results = build_test_result_string(7)
authed_post :create, pending_build_id: @pending_build.id, format: 'json', status: 'succeeded', results: ember_try_results, output: output

test_result = TestResult.find_by(addon_version_id: @pending_build.addon_version_id)
assert_equal 7, test_result.ember_try_results['scenarios'].count
end

test "'retry' action responds with HTTP unauthorized if request is not authenticated" do
test_result = create(:test_result)

post :retry, params: { id: test_result.id }
Expand Down Expand Up @@ -205,16 +214,24 @@ def build_server
end

def build_test_result_string(num_scenarios)
scenario_string = build_scenarios(num_scenarios)
%({"scenarios":[#{scenario_string}]})
end

def build_scenarios(n)
scenarios = []
n.times do |i|
scenarios << %({"scenarioName":"ember-2.#{i}","passed":true,"allowedToFail":false,"dependencies":[{"name":"ember","versionSeen":"2.#{i}.2","versionExpected":"~2.#{i}.0","type":"bower"}]})
end
scenarios.join(',')
scenarios = Array.new(num_scenarios) { |i| build_scenario(i) }
{ scenarios: scenarios }.to_json
end

def build_scenario(i)
{
scenarioName: "ember-3.#{i}",
passed: true,
allowedToFail: false,
dependencies: [
{
name: 'ember-source',
versionSeen: "3.#{i}.2",
versionExpected: "~3.#{i}.0",
type: 'yarn'
}
]
}
end

def authed_post(action, data = nil)
Expand Down
23 changes: 12 additions & 11 deletions test/factories/test_results.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,18 @@
#
# Table name: test_results
#
# id :integer not null, primary key
# addon_version_id :integer
# succeeded :boolean
# status_message :string
# created_at :datetime not null
# updated_at :datetime not null
# canary :boolean default(FALSE), not null
# build_server_id :integer
# semver_string :string
# output :text
# output_format :string default("text"), not null
# id :integer not null, primary key
# addon_version_id :integer
# succeeded :boolean
# status_message :string
# created_at :datetime not null
# updated_at :datetime not null
# canary :boolean default(FALSE), not null
# build_server_id :integer
# semver_string :string
# output :text
# output_format :string default("text"), not null
# ember_try_results :jsonb
#
# Indexes
#
Expand Down
1 change: 1 addition & 0 deletions test/integration/api/v2/test_result_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

class API::V2::ReviewTest < IntegrationTest
TEST_RESULT_ATTRIBUTES = %w[
ember-try-results
succeeded
status-message
created-at
Expand Down
23 changes: 12 additions & 11 deletions test/models/test_result_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,18 @@
#
# Table name: test_results
#
# id :integer not null, primary key
# addon_version_id :integer
# succeeded :boolean
# status_message :string
# created_at :datetime not null
# updated_at :datetime not null
# canary :boolean default(FALSE), not null
# build_server_id :integer
# semver_string :string
# output :text
# output_format :string default("text"), not null
# id :integer not null, primary key
# addon_version_id :integer
# succeeded :boolean
# status_message :string
# created_at :datetime not null
# updated_at :datetime not null
# canary :boolean default(FALSE), not null
# build_server_id :integer
# semver_string :string
# output :text
# output_format :string default("text"), not null
# ember_try_results :jsonb
#
# Indexes
#
Expand Down