Commit 2802b5bb authored by Alessio Caiazza's avatar Alessio Caiazza

Add ClusterApplicationEntity tests

parent b893a858
class ClusterAppEntity < Grape::Entity class ClusterApplicationEntity < Grape::Entity
expose :name expose :name
expose :status_name, as: :status expose :status_name, as: :status
expose :status_reason expose :status_reason
......
...@@ -3,5 +3,5 @@ class ClusterEntity < Grape::Entity ...@@ -3,5 +3,5 @@ class ClusterEntity < Grape::Entity
expose :status_name, as: :status expose :status_name, as: :status
expose :status_reason expose :status_reason
expose :applications, using: ClusterAppEntity expose :applications, using: ClusterApplicationEntity
end end
{ {
"type": "object", "type": "object",
"required" : [ "required" : [
"status" "status",
"applications"
], ],
"properties" : { "properties" : {
"status": { "type": "string" }, "status": { "type": "string" },
"status_reason": { "type": ["string", "null"] }, "status_reason": { "type": ["string", "null"] },
"applications": { "$ref": "#/definitions/applications" }
},
"additionalProperties": false,
"definitions": {
"applications": { "applications": {
"type": "object", "type": "array",
"additionalProperties": false, "items": { "$ref": "#/definitions/application_status" }
"properties" : {
"helm": { "$ref": "#/definitions/app_status" },
"runner": { "$ref": "#/definitions/app_status" },
"ingress": { "$ref": "#/definitions/app_status" },
"prometheus": { "$ref": "#/definitions/app_status" }
} }
}, },
"app_status": { "additionalProperties": false,
"definitions": {
"application_status": {
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
"properties" : { "properties" : {
"name": { "type": "string" },
"status": { "status": {
"type": { "type": {
"enum": [ "enum": [
"installable", "installable",
"scheduled",
"installing", "installing",
"installed", "installed",
"error" "errored"
] ]
} }
}, },
"status_reason": { "type": ["string", "null"] } "status_reason": { "type": ["string", "null"] }
}, },
"required" : [ "status" ] "required" : [ "name", "status" ]
} }
} }
} }
require 'spec_helper'
describe ClusterApplicationEntity do
describe '#as_json' do
let(:application) { build(:applications_helm) }
subject { described_class.new(application).as_json }
it 'has name' do
expect(subject[:name]).to eq(application.name)
end
it 'has status' do
expect(subject[:status]).to eq(:installable)
end
it 'has no status_reason' do
expect(subject[:status_reason]).to be_nil
end
context 'when application is errored' do
let(:application) { build(:applications_helm, :errored) }
it 'has corresponded data' do
expect(subject[:status]).to eq(:errored)
expect(subject[:status_reason]).not_to be_nil
expect(subject[:status_reason]).to eq(application.status_reason)
end
end
end
end
...@@ -35,8 +35,17 @@ describe ClusterEntity do ...@@ -35,8 +35,17 @@ describe ClusterEntity do
end end
end end
it 'contains applications' do context 'when no application has been installed' do
expect(subject[:applications]).to eq({}) let(:cluster) { create(:cluster) }
subject { described_class.new(cluster).as_json[:applications]}
it 'contains helm as installable' do
expect(subject).not_to be_empty
helm = subject[0]
expect(helm[:name]).to eq('helm')
expect(helm[:status]).to eq(:installable)
end
end end
end end
end end
...@@ -9,7 +9,7 @@ describe ClusterSerializer do ...@@ -9,7 +9,7 @@ describe ClusterSerializer do
let(:provider) { create(:provider_gcp, :errored) } let(:provider) { create(:provider_gcp, :errored) }
it 'serializes only status' do it 'serializes only status' do
expect(subject.keys).to contain_exactly(:status, :status_reason) expect(subject.keys).to contain_exactly(:status, :status_reason, :applications)
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment