diff --git a/.travis.yml b/.travis.yml index 1ea959b..f95e9db 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,7 @@ -sudo: false +sudo: required + +services: + - docker language: node_js diff --git a/Makefile b/Makefile index 81bceb0..acfad20 100644 --- a/Makefile +++ b/Makefile @@ -84,6 +84,7 @@ cp_js: clean_obj #################################### test: ## Run all unit tests and lints. $(NPM_BIN)/cross-env NODE_ENV=development make run_test -j 16 -C ./ + make -C docker test run_test: build lint build_test $(NPM_BIN)/cross-env TEST_TARGET=$(TEST_TARGET) $(NODE_BIN) ./tools/test_launcher.js diff --git a/docker/Makefile b/docker/Makefile index a686414..866add4 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -8,3 +8,7 @@ devcontainer: ./DEV.Dockerfile ## Create the Docker container for development in run_devcontainer: devcontainer ## Start up the docker container build by `make devcontainer`. docker run -p $(DEV_CONTAINER_HOST_PORT):80 -v $(PROJECT_ROOT)/__dist:/usr/share/nginx/html:ro $(DEV_CONTAINER_NAME) + +test: + docker-compose up --build --abort-on-container-exit + ! docker-compose ps | grep 'Exit 1' diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..781af7b --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,17 @@ +version: "2" +services: + web: + build: + context: ./ + dockerfile: ./DEV.Dockerfile + ports: + - 80 + volumes: + - ../__dist:/usr/share/nginx/html:ro + test: + image: quay.io/spesnova/infrataster + volumes: + - ./spec:/test/spec + depends_on: + - web + network_mode: "service:web" diff --git a/docker/spec/css_spec.rb b/docker/spec/css_spec.rb new file mode 100644 index 0000000..82cf90b --- /dev/null +++ b/docker/spec/css_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe server(:web) do + describe http('http://web/css/bundle.css') do + it "returns 200" do + expect(response.status).to eq(200) + end + it "returns test/css" do + expect(response.headers['Content-Type']).to eq("text/css") + end + it "responds content contains charset declaration" do + expect(response.body).to include("@charset 'utf-8';") + end + end +end diff --git a/docker/spec/operator_spec.rb b/docker/spec/operator_spec.rb new file mode 100644 index 0000000..15d0c90 --- /dev/null +++ b/docker/spec/operator_spec.rb @@ -0,0 +1,27 @@ +require 'spec_helper' + +describe server(:web) do + describe http('http://web/operator/') do + it "returns 200" do + expect(response.status).to eq(200) + end + it "returns test/html" do + expect(response.headers['Content-Type']).to eq("text/html") + end + it "responds content loads operator.js" do + expect(response.body).to include('') + end + end + + describe http('http://web/js/operator.js') do + it "returns 200" do + expect(response.status).to eq(200) + end + it "returns test/css" do + expect(response.headers['Content-Type']).to eq("application/javascript") + end + it "responds content contains 'use strict'" do + expect(response.body).to include("'use strict';") + end + end +end diff --git a/docker/spec/public_spec.rb b/docker/spec/public_spec.rb new file mode 100644 index 0000000..1e6b0e6 --- /dev/null +++ b/docker/spec/public_spec.rb @@ -0,0 +1,27 @@ +require 'spec_helper' + +describe server(:web) do + describe http('http://web/') do + it "returns 200" do + expect(response.status).to eq(200) + end + it "returns test/html" do + expect(response.headers['Content-Type']).to eq("text/html") + end + it "responds content loads public.js" do + expect(response.body).to include('') + end + end + + describe http('http://web/js/public.js') do + it "returns 200" do + expect(response.status).to eq(200) + end + it "returns test/css" do + expect(response.headers['Content-Type']).to eq("application/javascript") + end + it "responds content contains 'use strict'" do + expect(response.body).to include("'use strict';") + end + end +end diff --git a/docker/spec/spec_helper.rb b/docker/spec/spec_helper.rb new file mode 100644 index 0000000..f71c4d5 --- /dev/null +++ b/docker/spec/spec_helper.rb @@ -0,0 +1,5 @@ +require 'infrataster/rspec' + +Infrataster::Server.define(:web) do |server| + server.address = '127.0.0.1' +end diff --git a/docker/spec/sponsor_spec.rb b/docker/spec/sponsor_spec.rb new file mode 100644 index 0000000..6998659 --- /dev/null +++ b/docker/spec/sponsor_spec.rb @@ -0,0 +1,27 @@ +require 'spec_helper' + +describe server(:web) do + describe http('http://web/sponsor/') do + it "returns 200" do + expect(response.status).to eq(200) + end + it "returns test/html" do + expect(response.headers['Content-Type']).to eq("text/html") + end + it "responds content loads operator.js" do + expect(response.body).to include('') + end + end + + describe http('http://web/js/sponsor.js') do + it "returns 200" do + expect(response.status).to eq(200) + end + it "returns test/css" do + expect(response.headers['Content-Type']).to eq("application/javascript") + end + it "responds content contains 'use strict'" do + expect(response.body).to include("'use strict';") + end + end +end