├── .gitignore
├── README.md
├── backend
├── .dockerignore
├── Dockerfile
├── README.md
├── app
│ ├── application.go
│ ├── database
│ │ └── database.go
│ └── todolist
│ │ ├── handler.go
│ │ ├── handler_test.go
│ │ ├── model.go
│ │ ├── service.go
│ │ └── service_test.go
└── main.go
├── build.sh
├── docker-compose.yml
├── frontend
├── Caddyfile
├── Dockerfile
├── README.md
├── babel.config.js
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ └── index.html
└── src
│ ├── App.vue
│ └── main.js
└── tests
├── .dockerignore
├── Dockerfile
├── cypress.json
├── cypress
├── fixtures
│ └── example.json
├── integration
│ └── todolist_spec.js
├── plugins
│ └── index.js
└── support
│ ├── commands.js
│ └── index.js
├── package-lock.json
├── package.json
└── resetdb.sh
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 | # local env files
6 | .env.local
7 | .env.*.local
8 |
9 | # Log files
10 | npm-debug.log*
11 | yarn-debug.log*
12 | yarn-error.log*
13 |
14 | # Editor directories and files
15 | .idea
16 | .vscode
17 | *.suo
18 | *.ntvs*
19 | *.njsproj
20 | *.sln
21 | *.sw*
22 | tests/cypress/videos
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | E2E tests running Cypress on Docker
2 |
3 | ## Running
4 |
5 | ```
6 | git clone https://github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres.git
7 | cd e2e-tests-using-docker-cypress-vuejs-golang-postgres
8 | docker-compose up --exit-code-from tests --force-recreate
9 | ```
10 |
11 | ## License
12 |
13 | MIT
--------------------------------------------------------------------------------
/backend/.dockerignore:
--------------------------------------------------------------------------------
1 | .vscode
--------------------------------------------------------------------------------
/backend/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM golang:1.11-stretch
2 |
3 | COPY . /go/src/github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend
4 | WORKDIR /go/src/github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend
5 |
6 | ENV PORT 11080
7 |
8 | RUN sh -c "go get -u github.com/gorilla/mux \
9 | && go get -u github.com/gorilla/handlers \
10 | && go get -u github.com/jmoiron/sqlx \
11 | && go get -u github.com/lib/pq"
12 |
13 | RUN sh -c "go build -i -v -o api main.go \
14 | && mv api /usr/local/bin"
15 |
16 | CMD ["api"]
17 |
--------------------------------------------------------------------------------
/backend/README.md:
--------------------------------------------------------------------------------
1 | ## Running local
2 |
3 | Clone this repo:
4 |
5 | ```
6 | git clone https://github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres.git
7 | mkdir -p $GOPATH/src/github.com/gustavohenrique
8 | mv e2e-tests-using-docker-cypress-vuejs-golang-postgres $GOPATH/src/github.com/gustavohenrique/
9 | ```
10 |
11 | Create the database container:
12 |
13 | ```
14 | docker run -d --name todos_test -p 5434:5432 -e POSTGRES_USER=admin -e POSTGRES_PASSWORD=password -e POSTGRES_DB=todos gustavohenrique/postgis:11
15 | ```
16 |
17 | Create the table:
18 |
19 | ```
20 | docker exec todos_test bash -c 'psql -U admin todos_test -c "DROP TABLE IF EXISTS tasks;"'
21 | docker exec todos_test bash -c 'psql -U admin todos_test -c "CREATE TABLE tasks (id SERIAL NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, description VARCHAR, done BOOL NOT NULL DEFAULT false, CONSTRAINT id_pk PRIMARY KEY (id));"'
22 | ```
23 |
24 | Run the server:
25 |
26 | ```
27 | cd $GOPATH/src/github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend
28 | DATABASE_URL=postgres://admin:password@127.0.0.1:5434/todos_test?sslmode=disable go run main.go
29 | ```
30 |
31 | ## Unit Tests
32 |
33 | ```
34 | cd $GOPATH/src/github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend
35 | go test -cover -v github.com/gustavohenrique/e2e-tests-using-docker-vuejs-golang-postgres/backend/app/todolist
--------------------------------------------------------------------------------
/backend/app/application.go:
--------------------------------------------------------------------------------
1 | package app
2 |
3 | import (
4 | "fmt"
5 | "net/http"
6 |
7 | "github.com/gorilla/handlers"
8 | "github.com/gorilla/mux"
9 |
10 | "github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend/app/database"
11 | "github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend/app/todolist"
12 | )
13 |
14 | type Application struct {
15 | Router *mux.Router
16 | Handler *todolist.TaskHandler
17 | }
18 |
19 | func New() *Application {
20 | router := mux.NewRouter()
21 | router.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
22 | fmt.Fprintf(w, "It is working.")
23 | })
24 |
25 | app := &Application{}
26 | app.Router = router
27 | return app
28 | }
29 |
30 | func (app *Application) EnableCORS() http.Handler {
31 | headersOk := handlers.AllowedHeaders([]string{"X-Requested-With", "Content-Type", "Authorization"})
32 | originsOk := handlers.AllowedOrigins([]string{"*"})
33 | methodsOk := handlers.AllowedMethods([]string{"GET", "POST", "PUT", "OPTIONS"})
34 | app.Router.Use(mux.CORSMethodMiddleware(app.Router))
35 | return handlers.CORS(originsOk, headersOk, methodsOk)(app.Router)
36 | }
37 |
38 | func (app *Application) Initialize(params map[string]string) {
39 | databaseURL := params["databaseURL"]
40 | db := database.NewDB(databaseURL)
41 | service := todolist.NewService(db)
42 | handler := app.Handler
43 | if handler == nil {
44 | h := todolist.NewHandler(service)
45 | handler = &h
46 | }
47 | app.Router.HandleFunc("/todos", handler.FindAll).Methods("GET")
48 | app.Router.HandleFunc("/todos", handler.Create).Methods("POST", "OPTIONS")
49 | app.Router.HandleFunc("/todos/{id}", handler.Done).Methods("PUT", "OPTIONS")
50 | }
51 |
--------------------------------------------------------------------------------
/backend/app/database/database.go:
--------------------------------------------------------------------------------
1 | package database
2 |
3 | import (
4 | "time"
5 |
6 | "github.com/jmoiron/sqlx"
7 | _ "github.com/lib/pq"
8 | )
9 |
10 | type Database struct {
11 | Instance *sqlx.DB
12 | ConnStr string
13 | }
14 |
15 | type Connection func() *sqlx.DB
16 |
17 | func NewDB(connStr string) Database {
18 | d := Database{}
19 | d.ConnStr = connStr
20 | return d
21 | }
22 |
23 | func (d Database) Connect() (*sqlx.DB, error) {
24 | var err error
25 | if d.Instance == nil {
26 | d.Instance, err = d.getInstance()
27 | }
28 | return d.Instance, err
29 | }
30 |
31 | func (d Database) getInstance() (*sqlx.DB, error) {
32 | db, err := sqlx.Connect("postgres", d.ConnStr)
33 | if err != nil {
34 | return db, err
35 | }
36 | db.SetMaxOpenConns(1)
37 | db.SetMaxIdleConns(1)
38 | db.SetConnMaxLifetime(time.Nanosecond)
39 | return db, err
40 | }
41 |
--------------------------------------------------------------------------------
/backend/app/todolist/handler.go:
--------------------------------------------------------------------------------
1 | package todolist
2 |
3 | import (
4 | "encoding/json"
5 | "fmt"
6 | "io/ioutil"
7 | "log"
8 | "net/http"
9 | "strconv"
10 |
11 | "github.com/gorilla/mux"
12 | )
13 |
14 | type TaskHandler struct {
15 | service ServiceInterface
16 | }
17 |
18 | func NewHandler(service ServiceInterface) TaskHandler {
19 | handler := TaskHandler{}
20 | handler.service = service
21 | return handler
22 | }
23 |
24 | func (this TaskHandler) FindAll(w http.ResponseWriter, r *http.Request) {
25 | tasks, err := this.service.FindAll()
26 | if err != nil {
27 | log.Println("#FindAll:", err)
28 | w.WriteHeader(http.StatusInternalServerError)
29 | w.Header().Set("Content-Type", "application/json")
30 | resp := map[string]string{
31 | "error": fmt.Sprintf("%v", err),
32 | }
33 | json.NewEncoder(w).Encode(resp)
34 | return
35 | }
36 | json.NewEncoder(w).Encode(tasks)
37 | }
38 |
39 | func (this TaskHandler) Create(w http.ResponseWriter, r *http.Request) {
40 | w.Header().Set("Content-Type", "application/json")
41 | b, err := ioutil.ReadAll(r.Body)
42 | defer r.Body.Close()
43 | var task Task
44 | err = json.Unmarshal(b, &task)
45 | if err != nil {
46 | http.Error(w, err.Error(), http.StatusBadRequest)
47 | return
48 | }
49 | log.Printf("Creating task %v", task)
50 | saved, err := this.service.Create(task)
51 | if err != nil {
52 | log.Println("#Create:", err)
53 | w.WriteHeader(http.StatusInternalServerError)
54 | resp := map[string]string{
55 | "error": fmt.Sprintf("%v", err),
56 | }
57 | json.NewEncoder(w).Encode(resp)
58 | return
59 | }
60 | w.WriteHeader(http.StatusCreated)
61 | json.NewEncoder(w).Encode(saved)
62 | }
63 |
64 | func (this TaskHandler) Done(w http.ResponseWriter, r *http.Request) {
65 | w.Header().Set("Content-Type", "application/json")
66 | vars := mux.Vars(r)
67 | id, err := strconv.Atoi(vars["id"])
68 | task := Task{ID: id}
69 | saved, err := this.service.Done(task)
70 | if err != nil {
71 | log.Println("#Done:", err)
72 | w.WriteHeader(http.StatusInternalServerError)
73 | resp := map[string]string{
74 | "error": fmt.Sprintf("%v", err),
75 | }
76 | json.NewEncoder(w).Encode(resp)
77 | return
78 | }
79 | json.NewEncoder(w).Encode(saved)
80 | }
81 |
--------------------------------------------------------------------------------
/backend/app/todolist/handler_test.go:
--------------------------------------------------------------------------------
1 | package todolist_test
2 |
3 | import (
4 | "bytes"
5 | "encoding/json"
6 | "net/http"
7 | "net/http/httptest"
8 | "testing"
9 | "time"
10 |
11 | "github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend/app"
12 | "github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend/app/todolist"
13 | )
14 |
15 | type MockService struct{}
16 |
17 | func (this MockService) FindAll() ([]todolist.Task, error) {
18 | layout := "2006-01-02T15:04:05.000Z"
19 | str := "2018-12-31T15:00:00.300Z"
20 | t, _ := time.Parse(layout, str)
21 | todos := []todolist.Task{
22 | {ID: 1, Description: "Item 1", CreatedAt: t, Done: false},
23 | {ID: 2, Description: "Item 2", CreatedAt: t, Done: true},
24 | }
25 | return todos, nil
26 | }
27 |
28 | func (this MockService) Create(todo todolist.Task) (todolist.Task, error) {
29 | todos, err := this.FindAll()
30 | return todos[0], err
31 | }
32 |
33 | func (this MockService) Done(todo todolist.Task) (todolist.Task, error) {
34 | todos, err := this.FindAll()
35 | return todos[1], err
36 | }
37 |
38 | var application *app.Application
39 |
40 | func setUpHandler() {
41 | handler := todolist.NewHandler(MockService{})
42 | application = app.New()
43 | application.Handler = &handler
44 | application.Initialize(map[string]string{
45 | "databaseURL": "",
46 | })
47 | }
48 |
49 | func TestFindAll(t *testing.T) {
50 | setUpHandler()
51 | req, _ := http.NewRequest("GET", "/todos", nil)
52 | rr := httptest.NewRecorder()
53 | application.Router.ServeHTTP(rr, req)
54 |
55 | if status := rr.Code; status != http.StatusOK {
56 | t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusOK)
57 | }
58 |
59 | resp := rr.Body.String()
60 | results := []todolist.Task{}
61 | json.Unmarshal([]byte(resp), &results)
62 | expected := 2
63 | if len(results) != expected {
64 | t.Errorf("handler returned unexpected body: got %d want %d", len(results), expected)
65 | }
66 | }
67 |
68 | func TestCreate(t *testing.T) {
69 | setUpHandler()
70 | var jsonStr = []byte(`{"description": "Item 2"}`)
71 | req, _ := http.NewRequest("POST", "/todos", bytes.NewBuffer(jsonStr))
72 | req.Header.Set("Content-Type", "application/json")
73 | rr := httptest.NewRecorder()
74 | application.Router.ServeHTTP(rr, req)
75 |
76 | if status := rr.Code; status != http.StatusCreated {
77 | t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusCreated)
78 | }
79 |
80 | resp := rr.Body.String()
81 | result := todolist.Task{}
82 | json.Unmarshal([]byte(resp), &result)
83 | expected := 1
84 | if result.ID != expected {
85 | t.Errorf("handler returned a wrong ID: got %d want %d", result.ID, expected)
86 | }
87 | }
88 |
89 | func TestDone(t *testing.T) {
90 | setUpHandler()
91 | req, _ := http.NewRequest("PUT", "/todos/2", nil)
92 | req.Header.Set("Content-Type", "application/json")
93 | rr := httptest.NewRecorder()
94 | application.Router.ServeHTTP(rr, req)
95 |
96 | if status := rr.Code; status != http.StatusOK {
97 | t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusOK)
98 | }
99 |
100 | resp := rr.Body.String()
101 | result := todolist.Task{}
102 | json.Unmarshal([]byte(resp), &result)
103 | expected := 2
104 | if result.ID != expected {
105 | t.Errorf("handler returned a wrong ID: got %d want %d", result.ID, expected)
106 | }
107 | if !result.Done {
108 | t.Errorf("handler returned not completed: got done = %v want true", result.Done)
109 | }
110 | }
111 |
--------------------------------------------------------------------------------
/backend/app/todolist/model.go:
--------------------------------------------------------------------------------
1 | package todolist
2 |
3 | import "time"
4 |
5 | type Task struct {
6 | ID int `json:"id"`
7 | CreatedAt time.Time `json:"createdAt" db:"created_at"`
8 | Description string `json:"description"`
9 | Done bool `json:"done"`
10 | }
11 |
--------------------------------------------------------------------------------
/backend/app/todolist/service.go:
--------------------------------------------------------------------------------
1 | package todolist
2 |
3 | import (
4 | "github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend/app/database"
5 | )
6 |
7 | type ServiceInterface interface {
8 | FindAll() ([]Task, error)
9 | Create(task Task) (Task, error)
10 | Done(task Task) (Task, error)
11 | }
12 |
13 | type TaskService struct {
14 | DB database.Database
15 | }
16 |
17 | func NewService(db database.Database) TaskService {
18 | service := TaskService{}
19 | service.DB = db
20 | return service
21 | }
22 |
23 | func (this TaskService) FindAll() ([]Task, error) {
24 | tasks := []Task{}
25 | db, err := this.DB.Connect()
26 | if err == nil {
27 | db.Select(&tasks, "SELECT * FROM tasks")
28 | }
29 | return tasks, err
30 | }
31 |
32 | func (this TaskService) Create(task Task) (Task, error) {
33 | db, err := this.DB.Connect()
34 | if err == nil {
35 | query := "INSERT INTO tasks (description) VALUES ($1) RETURNING *"
36 | stmt, err := db.Preparex(query)
37 | var saved Task
38 | err = stmt.Get(&saved, task.Description)
39 | return saved, err
40 | }
41 | return task, err
42 | }
43 |
44 | func (this TaskService) Done(task Task) (Task, error) {
45 | db, err := this.DB.Connect()
46 | if err == nil {
47 | query := "UPDATE tasks SET done = true WHERE id = $1 RETURNING *"
48 | stmt, err := db.Preparex(query)
49 | var saved Task
50 | err = stmt.Get(&saved, task.ID)
51 | return saved, err
52 | }
53 | return task, err
54 | }
55 |
--------------------------------------------------------------------------------
/backend/app/todolist/service_test.go:
--------------------------------------------------------------------------------
1 | package todolist_test
2 |
3 | import (
4 | "log"
5 | "testing"
6 |
7 | "github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend/app/database"
8 | "github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend/app/todolist"
9 | )
10 |
11 | var (
12 | db database.Database
13 | service todolist.TaskService
14 | )
15 |
16 | func setUpService() {
17 | db = database.NewDB("postgres://admin:password@127.0.0.1:5434/todos?sslmode=disable")
18 | conn, err := db.Connect()
19 | if err != nil {
20 | log.Fatal("Error connecting to the database test.", err)
21 | }
22 | conn.Exec("TRUNCATE tasks RESTART IDENTITY;")
23 | tx, _ := conn.Begin()
24 | stmt, _ := tx.Prepare("INSERT INTO tasks (description, done) VALUES ($1, $2)")
25 | stmt.Exec("Write a new post", false)
26 | stmt.Exec("Fix some bugs in my app", false)
27 | stmt.Exec("Install the new Linux Mint version", false)
28 | stmt.Exec("Create a TASK app as example of e2e testing", true)
29 | tx.Commit()
30 |
31 | service = todolist.NewService(db)
32 | }
33 |
34 | func TestFindAllShouldReturnsAllTasks(t *testing.T) {
35 | setUpService()
36 | tasks, _ := service.FindAll()
37 | expected := 4
38 | if len(tasks) != expected {
39 | t.Errorf("Oops, failed to find all tasks. Got %d but I want %d", len(tasks), expected)
40 | }
41 | }
42 |
43 | func TestCreateNewTaskShouldReturnsItWithID(t *testing.T) {
44 | setUpService()
45 | task := todolist.Task{
46 | Description: "Testing create todo",
47 | }
48 | saved, _ := service.Create(task)
49 | expected := 5
50 | if expected != saved.ID {
51 | t.Errorf("The new todo ID is %d but the expected is %d", saved.ID, expected)
52 | }
53 | }
54 |
55 | func TestUpdateTaskAsDoneShouldReturnsItWithDoneEqualTrue(t *testing.T) {
56 | setUpService()
57 | task := todolist.Task{
58 | ID: 3,
59 | }
60 | saved, _ := service.Done(task)
61 | if !saved.Done {
62 | t.Fail()
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/backend/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "fmt"
5 | "log"
6 | "net/http"
7 | "os"
8 |
9 | "github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/backend/app"
10 | )
11 |
12 | func main() {
13 | port := "11080"
14 | if len(os.Args) > 1 {
15 | port = os.Args[1]
16 | }
17 |
18 | databaseURL := os.Getenv("DATABASE_URL")
19 | if databaseURL == "" {
20 | log.Fatalf("Please set the DATABASE_URL variable. Ex.:\nDATABASE_URL=postgres://admin:password@127.0.0.1:5432/todos?sslmode=disable")
21 | }
22 |
23 | var application *app.Application
24 | application = app.New()
25 | application.Initialize(map[string]string{
26 | "databaseURL": databaseURL,
27 | })
28 |
29 | fmt.Println("Server running on", port)
30 | http.ListenAndServe(":"+port, application.EnableCORS())
31 | }
32 |
--------------------------------------------------------------------------------
/build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | git clone https://github.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres
3 | cd e2e-tests-using-docker-cypress-vuejs-golang-postgres
4 | docker-compose up --exit-code-from tests --force-recreate
5 |
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3"
2 | services:
3 | frontend:
4 | build:
5 | context: ./frontend
6 | args:
7 | - VUE_APP_API_URL=http://backend:11080
8 | container_name: frontend
9 | hostname: frontend
10 | ports:
11 | - "2015:2015"
12 | expose:
13 | - "2015"
14 | depends_on:
15 | - backend
16 | environment:
17 | - VUE_APP_API_URL=http://backend:11080
18 |
19 | backend:
20 | build: ./backend
21 | container_name: backend
22 | hostname: backend
23 | ports:
24 | - "17000:17000"
25 | expose:
26 | - "11080"
27 | depends_on:
28 | - db
29 | environment:
30 | - DATABASE_URL=postgres://admin:password@db:5432/todos?sslmode=disable
31 |
32 | db:
33 | image: postgres:alpine
34 | container_name: db
35 | hostname: db
36 | ports:
37 | - "5432:5432"
38 | environment:
39 | - POSTGRES_USER=admin
40 | - POSTGRES_PASSWORD=password
41 | - POSTGRES_DB=todos
42 |
43 | tests:
44 | build: ./tests
45 | container_name: tests
46 | depends_on:
47 | - frontend
48 | - backend
49 | - db
50 | environment:
51 | - DATABASE_URL=postgres://admin:password@db:5432/todos?sslmode=disable
52 | - CYPRESS_FRONTEND_URL=http://frontend:2015
53 | volumes:
54 | - "./tests/cypress:/home/node/tests/cypress"
55 | - "./tests/report:/home/node/tests/report"
--------------------------------------------------------------------------------
/frontend/Caddyfile:
--------------------------------------------------------------------------------
1 | 0.0.0.0:2015
2 | gzip
3 | root /app/dist
4 | rewrite {
5 | regexp .*
6 | to {path} /
7 | }
8 |
--------------------------------------------------------------------------------
/frontend/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM gustavohenrique/vue-cli:10-slim
2 | ADD . /app
3 | ADD Caddyfile /etc/Caddyfile
4 | ARG VUE_APP_API_URL
5 |
6 | RUN cd /app \
7 | && npm install \
8 | && VUE_APP_API_URL=${VUE_APP_API_URL} npm run build
9 |
10 | WORKDIR /app/dist
11 | CMD ["caddy", "-conf", "/etc/Caddyfile"]
12 |
--------------------------------------------------------------------------------
/frontend/README.md:
--------------------------------------------------------------------------------
1 | # frontend
2 |
3 | ## Project setup
4 | ```
5 | npm install
6 | ```
7 |
8 | ### Compiles and hot-reloads for development
9 | ```
10 | npm run serve
11 | ```
12 |
13 | ### Compiles and minifies for production
14 | ```
15 | npm run build
16 | ```
17 |
18 | ### Run your tests
19 | ```
20 | npm run test
21 | ```
22 |
23 | ### Lints and fixes files
24 | ```
25 | npm run lint
26 | ```
27 |
28 | ### Customize configuration
29 | See [Configuration Reference](https://cli.vuejs.org/config/).
30 |
--------------------------------------------------------------------------------
/frontend/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | '@vue/app'
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "frontend",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vue-cli-service serve",
7 | "build": "vue-cli-service build",
8 | "lint": "vue-cli-service lint"
9 | },
10 | "dependencies": {
11 | "axios": "^0.18.0",
12 | "vue": "^2.5.17"
13 | },
14 | "devDependencies": {
15 | "@vue/cli-plugin-babel": "^3.2.0",
16 | "@vue/cli-plugin-eslint": "^3.2.0",
17 | "@vue/cli-service": "^3.2.0",
18 | "babel-eslint": "^10.0.1",
19 | "eslint": "^5.8.0",
20 | "eslint-plugin-vue": "^5.0.0-0",
21 | "vue-template-compiler": "^2.5.17"
22 | },
23 | "eslintConfig": {
24 | "root": true,
25 | "env": {
26 | "node": true
27 | },
28 | "extends": [
29 | "plugin:vue/essential",
30 | "eslint:recommended"
31 | ],
32 | "rules": {},
33 | "parserOptions": {
34 | "parser": "babel-eslint"
35 | }
36 | },
37 | "postcss": {
38 | "plugins": {
39 | "autoprefixer": {}
40 | }
41 | },
42 | "browserslist": [
43 | "> 1%",
44 | "last 2 versions",
45 | "not ie <= 8"
46 | ]
47 | }
48 |
--------------------------------------------------------------------------------
/frontend/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gustavohenrique/e2e-tests-using-docker-cypress-vuejs-golang-postgres/0e1865dfaa33926b105c350362171dab552e690d/frontend/public/favicon.ico
--------------------------------------------------------------------------------
/frontend/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | frontend
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/frontend/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
32 |
33 |
34 |
79 |
80 |
239 |
--------------------------------------------------------------------------------
/frontend/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App.vue'
3 |
4 | Vue.config.productionTip = false
5 |
6 | new Vue({
7 | render: h => h(App),
8 | }).$mount('#app')
9 |
--------------------------------------------------------------------------------
/tests/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | report
3 | cypress
--------------------------------------------------------------------------------
/tests/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM cypress/base:10
2 |
3 | ADD . /home/node/tests
4 | WORKDIR /home/node/tests
5 |
6 | RUN bash -c 'apt-get update \
7 | && apt-get install -y postgresql-client \
8 | && npm install -g update \
9 | && chown -Rf node:node /home/node/tests'
10 |
11 | USER node
12 | RUN bash -c 'npm install \
13 | && npx cypress install'
14 |
15 | CMD ["npm", "test"]
16 |
--------------------------------------------------------------------------------
/tests/cypress.json:
--------------------------------------------------------------------------------
1 | {
2 | "reporter": "junit",
3 | "reporterOptions": {
4 | "mochaFile": "report/output.xml",
5 | "toConsole": false
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/tests/cypress/fixtures/example.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Using fixtures to represent data",
3 | "email": "hello@cypress.io",
4 | "body": "Fixtures are a great way to mock data for responses to routes"
5 | }
--------------------------------------------------------------------------------
/tests/cypress/integration/todolist_spec.js:
--------------------------------------------------------------------------------
1 | describe('Todo tests', () => {
2 |
3 | const baseUrl = Cypress.env('FRONTEND_URL')
4 |
5 | beforeEach(() => {
6 | cy.exec('sh resetdb.sh')
7 | })
8 |
9 | context('When page is opened', () => {
10 | it('Creates a new task and add it in top of the list', () => {
11 | const task = 'todo test 1 cypress'
12 | cy.visit(baseUrl)
13 | .get('input[type="text"]').clear().type(task)
14 | .get('button.button').click()
15 |
16 | cy.get('ul > li:first > .tasks__item__toggle')
17 | .should(($item) => {
18 | expect($item).to.contain(task)
19 | })
20 | })
21 |
22 | it('Clicks on the task to mark as complete and hide it from the list', () => {
23 | const selector = 'ul > li:first > .tasks__item__toggle'
24 | cy.visit(baseUrl)
25 | .get(selector)
26 | .then(($btn) => {
27 | const task = $btn.text()
28 | $btn.click()
29 |
30 | cy.get(selector).should('have.class', 'tasks__item__toggle--done')
31 | })
32 | })
33 | })
34 |
35 | })
36 |
--------------------------------------------------------------------------------
/tests/cypress/plugins/index.js:
--------------------------------------------------------------------------------
1 | // ***********************************************************
2 | // This example plugins/index.js can be used to load plugins
3 | //
4 | // You can change the location of this file or turn off loading
5 | // the plugins file with the 'pluginsFile' configuration option.
6 | //
7 | // You can read more here:
8 | // https://on.cypress.io/plugins-guide
9 | // ***********************************************************
10 |
11 | // This function is called when a project is opened or re-opened (e.g. due to
12 | // the project's config changing)
13 |
14 | module.exports = (on, config) => {
15 | // `on` is used to hook into various events Cypress emits
16 | // `config` is the resolved Cypress config
17 | }
18 |
--------------------------------------------------------------------------------
/tests/cypress/support/commands.js:
--------------------------------------------------------------------------------
1 | // ***********************************************
2 | // This example commands.js shows you how to
3 | // create various custom commands and overwrite
4 | // existing commands.
5 | //
6 | // For more comprehensive examples of custom
7 | // commands please read more here:
8 | // https://on.cypress.io/custom-commands
9 | // ***********************************************
10 | //
11 | //
12 | // -- This is a parent command --
13 | // Cypress.Commands.add("login", (email, password) => { ... })
14 | //
15 | //
16 | // -- This is a child command --
17 | // Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... })
18 | //
19 | //
20 | // -- This is a dual command --
21 | // Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... })
22 | //
23 | //
24 | // -- This is will overwrite an existing command --
25 | // Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
26 |
--------------------------------------------------------------------------------
/tests/cypress/support/index.js:
--------------------------------------------------------------------------------
1 | // ***********************************************************
2 | // This example support/index.js is processed and
3 | // loaded automatically before your test files.
4 | //
5 | // This is a great place to put global configuration and
6 | // behavior that modifies Cypress.
7 | //
8 | // You can change the location of this file or turn off
9 | // automatically serving support files with the
10 | // 'supportFile' configuration option.
11 | //
12 | // You can read more here:
13 | // https://on.cypress.io/configuration
14 | // ***********************************************************
15 |
16 | // Import commands.js using ES2015 syntax:
17 | import './commands'
18 |
19 | // Alternatively you can use CommonJS syntax:
20 | // require('./commands')
21 |
--------------------------------------------------------------------------------
/tests/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "e2e-tests-using-docker-cypress-vuejs-golang-postgres",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@cypress/listr-verbose-renderer": {
8 | "version": "0.4.1",
9 | "resolved": "https://registry.npmjs.org/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz",
10 | "integrity": "sha1-p3SS9LEdzHxEajSz4ochr9M8ZCo=",
11 | "dev": true,
12 | "requires": {
13 | "chalk": "^1.1.3",
14 | "cli-cursor": "^1.0.2",
15 | "date-fns": "^1.27.2",
16 | "figures": "^1.7.0"
17 | },
18 | "dependencies": {
19 | "chalk": {
20 | "version": "1.1.3",
21 | "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
22 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
23 | "dev": true,
24 | "requires": {
25 | "ansi-styles": "^2.2.1",
26 | "escape-string-regexp": "^1.0.2",
27 | "has-ansi": "^2.0.0",
28 | "strip-ansi": "^3.0.0",
29 | "supports-color": "^2.0.0"
30 | }
31 | },
32 | "supports-color": {
33 | "version": "2.0.0",
34 | "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
35 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
36 | "dev": true
37 | }
38 | }
39 | },
40 | "@cypress/xvfb": {
41 | "version": "1.2.3",
42 | "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.3.tgz",
43 | "integrity": "sha512-yYrK+/bgL3hwoRHMZG4r5fyLniCy1pXex5fimtewAY6vE/jsVs8Q37UsEO03tFlcmiLnQ3rBNMaZBYTi/+C1cw==",
44 | "dev": true,
45 | "requires": {
46 | "debug": "^3.1.0",
47 | "lodash.once": "^4.1.1"
48 | }
49 | },
50 | "@types/blob-util": {
51 | "version": "1.3.3",
52 | "resolved": "https://registry.npmjs.org/@types/blob-util/-/blob-util-1.3.3.tgz",
53 | "integrity": "sha512-4ahcL/QDnpjWA2Qs16ZMQif7HjGP2cw3AGjHabybjw7Vm1EKu+cfQN1D78BaZbS1WJNa1opSMF5HNMztx7lR0w==",
54 | "dev": true
55 | },
56 | "@types/bluebird": {
57 | "version": "3.5.18",
58 | "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.18.tgz",
59 | "integrity": "sha512-OTPWHmsyW18BhrnG5x8F7PzeZ2nFxmHGb42bZn79P9hl+GI5cMzyPgQTwNjbem0lJhoru/8vtjAFCUOu3+gE2w==",
60 | "dev": true
61 | },
62 | "@types/chai": {
63 | "version": "4.0.8",
64 | "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.0.8.tgz",
65 | "integrity": "sha512-m812CONwdZn/dMzkIJEY0yAs4apyTkTORgfB2UsMOxgkUbC205AHnm4T8I0I5gPg9MHrFc1dJ35iS75c0CJkjg==",
66 | "dev": true
67 | },
68 | "@types/chai-jquery": {
69 | "version": "1.1.35",
70 | "resolved": "https://registry.npmjs.org/@types/chai-jquery/-/chai-jquery-1.1.35.tgz",
71 | "integrity": "sha512-7aIt9QMRdxuagLLI48dPz96YJdhu64p6FCa6n4qkGN5DQLHnrIjZpD9bXCvV2G0NwgZ1FAmfP214dxc5zNCfgQ==",
72 | "dev": true,
73 | "requires": {
74 | "@types/chai": "*",
75 | "@types/jquery": "*"
76 | }
77 | },
78 | "@types/jquery": {
79 | "version": "3.3.6",
80 | "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.3.6.tgz",
81 | "integrity": "sha512-403D4wN95Mtzt2EoQHARf5oe/jEPhzBOBNrunk+ydQGW8WmkQ/E8rViRAEB1qEt/vssfGfNVD6ujP4FVeegrLg==",
82 | "dev": true
83 | },
84 | "@types/lodash": {
85 | "version": "4.14.87",
86 | "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.87.tgz",
87 | "integrity": "sha512-AqRC+aEF4N0LuNHtcjKtvF9OTfqZI0iaBoe3dA6m/W+/YZJBZjBmW/QIZ8fBeXC6cnytSY9tBoFBqZ9uSCeVsw==",
88 | "dev": true
89 | },
90 | "@types/minimatch": {
91 | "version": "3.0.3",
92 | "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
93 | "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
94 | "dev": true
95 | },
96 | "@types/mocha": {
97 | "version": "2.2.44",
98 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.44.tgz",
99 | "integrity": "sha512-k2tWTQU8G4+iSMvqKi0Q9IIsWAp/n8xzdZS4Q4YVIltApoMA00wFBFdlJnmoaK1/z7B0Cy0yPe6GgXteSmdUNw==",
100 | "dev": true
101 | },
102 | "@types/sinon": {
103 | "version": "7.0.0",
104 | "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-7.0.0.tgz",
105 | "integrity": "sha512-kcYoPw0uKioFVC/oOqafk2yizSceIQXCYnkYts9vJIwQklFRsMubTObTDrjQamUyBRd47332s85074cd/hCwxg==",
106 | "dev": true
107 | },
108 | "@types/sinon-chai": {
109 | "version": "2.7.29",
110 | "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-2.7.29.tgz",
111 | "integrity": "sha512-EkI/ZvJT4hglWo7Ipf9SX+J+R9htNOMjW8xiOhce7+0csqvgoF5IXqY5Ae1GqRgNtWCuaywR5HjVa1snkTqpOw==",
112 | "dev": true,
113 | "requires": {
114 | "@types/chai": "*",
115 | "@types/sinon": "*"
116 | }
117 | },
118 | "ajv": {
119 | "version": "5.5.2",
120 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
121 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
122 | "dev": true,
123 | "requires": {
124 | "co": "^4.6.0",
125 | "fast-deep-equal": "^1.0.0",
126 | "fast-json-stable-stringify": "^2.0.0",
127 | "json-schema-traverse": "^0.3.0"
128 | }
129 | },
130 | "ansi-escapes": {
131 | "version": "1.4.0",
132 | "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
133 | "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=",
134 | "dev": true
135 | },
136 | "ansi-regex": {
137 | "version": "2.1.1",
138 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
139 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
140 | "dev": true
141 | },
142 | "ansi-styles": {
143 | "version": "2.2.1",
144 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
145 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
146 | "dev": true
147 | },
148 | "asn1": {
149 | "version": "0.2.4",
150 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
151 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
152 | "dev": true,
153 | "requires": {
154 | "safer-buffer": "~2.1.0"
155 | }
156 | },
157 | "assert-plus": {
158 | "version": "1.0.0",
159 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
160 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
161 | "dev": true
162 | },
163 | "async": {
164 | "version": "2.4.0",
165 | "resolved": "https://registry.npmjs.org/async/-/async-2.4.0.tgz",
166 | "integrity": "sha1-SZAgDxjqW4N8LMT4wDGmmFw4VhE=",
167 | "dev": true,
168 | "requires": {
169 | "lodash": "^4.14.0"
170 | }
171 | },
172 | "asynckit": {
173 | "version": "0.4.0",
174 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
175 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
176 | "dev": true
177 | },
178 | "aws-sign2": {
179 | "version": "0.7.0",
180 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
181 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
182 | "dev": true
183 | },
184 | "aws4": {
185 | "version": "1.8.0",
186 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
187 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
188 | "dev": true
189 | },
190 | "babel-runtime": {
191 | "version": "6.26.0",
192 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
193 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
194 | "dev": true,
195 | "requires": {
196 | "core-js": "^2.4.0",
197 | "regenerator-runtime": "^0.11.0"
198 | }
199 | },
200 | "balanced-match": {
201 | "version": "1.0.0",
202 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
203 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
204 | "dev": true
205 | },
206 | "bcrypt-pbkdf": {
207 | "version": "1.0.2",
208 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
209 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
210 | "dev": true,
211 | "requires": {
212 | "tweetnacl": "^0.14.3"
213 | }
214 | },
215 | "bluebird": {
216 | "version": "3.5.0",
217 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz",
218 | "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=",
219 | "dev": true
220 | },
221 | "brace-expansion": {
222 | "version": "1.1.11",
223 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
224 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
225 | "dev": true,
226 | "requires": {
227 | "balanced-match": "^1.0.0",
228 | "concat-map": "0.0.1"
229 | }
230 | },
231 | "buffer-crc32": {
232 | "version": "0.2.13",
233 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
234 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
235 | "dev": true
236 | },
237 | "cachedir": {
238 | "version": "1.3.0",
239 | "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-1.3.0.tgz",
240 | "integrity": "sha512-O1ji32oyON9laVPJL1IZ5bmwd2cB46VfpxkDequezH+15FDzzVddEyrGEeX4WusDSqKxdyFdDQDEG1yo1GoWkg==",
241 | "dev": true,
242 | "requires": {
243 | "os-homedir": "^1.0.1"
244 | }
245 | },
246 | "caseless": {
247 | "version": "0.12.0",
248 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
249 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
250 | "dev": true
251 | },
252 | "chalk": {
253 | "version": "2.4.1",
254 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
255 | "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
256 | "dev": true,
257 | "requires": {
258 | "ansi-styles": "^3.2.1",
259 | "escape-string-regexp": "^1.0.5",
260 | "supports-color": "^5.3.0"
261 | },
262 | "dependencies": {
263 | "ansi-styles": {
264 | "version": "3.2.1",
265 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
266 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
267 | "dev": true,
268 | "requires": {
269 | "color-convert": "^1.9.0"
270 | }
271 | },
272 | "supports-color": {
273 | "version": "5.5.0",
274 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
275 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
276 | "dev": true,
277 | "requires": {
278 | "has-flag": "^3.0.0"
279 | }
280 | }
281 | }
282 | },
283 | "check-more-types": {
284 | "version": "2.24.0",
285 | "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
286 | "integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=",
287 | "dev": true
288 | },
289 | "ci-info": {
290 | "version": "1.6.0",
291 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
292 | "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
293 | "dev": true
294 | },
295 | "cli-cursor": {
296 | "version": "1.0.2",
297 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
298 | "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
299 | "dev": true,
300 | "requires": {
301 | "restore-cursor": "^1.0.1"
302 | }
303 | },
304 | "cli-spinners": {
305 | "version": "0.1.2",
306 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz",
307 | "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=",
308 | "dev": true
309 | },
310 | "cli-truncate": {
311 | "version": "0.2.1",
312 | "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz",
313 | "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=",
314 | "dev": true,
315 | "requires": {
316 | "slice-ansi": "0.0.4",
317 | "string-width": "^1.0.1"
318 | }
319 | },
320 | "co": {
321 | "version": "4.6.0",
322 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
323 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
324 | "dev": true
325 | },
326 | "code-point-at": {
327 | "version": "1.1.0",
328 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
329 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
330 | "dev": true
331 | },
332 | "color-convert": {
333 | "version": "1.9.3",
334 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
335 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
336 | "dev": true,
337 | "requires": {
338 | "color-name": "1.1.3"
339 | }
340 | },
341 | "color-name": {
342 | "version": "1.1.3",
343 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
344 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
345 | "dev": true
346 | },
347 | "combined-stream": {
348 | "version": "1.0.7",
349 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
350 | "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
351 | "dev": true,
352 | "requires": {
353 | "delayed-stream": "~1.0.0"
354 | }
355 | },
356 | "commander": {
357 | "version": "2.11.0",
358 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
359 | "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
360 | "dev": true
361 | },
362 | "common-tags": {
363 | "version": "1.4.0",
364 | "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.4.0.tgz",
365 | "integrity": "sha1-EYe+Tz1M8MBCfUP3Tu8fc1AWFMA=",
366 | "dev": true,
367 | "requires": {
368 | "babel-runtime": "^6.18.0"
369 | }
370 | },
371 | "concat-map": {
372 | "version": "0.0.1",
373 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
374 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
375 | "dev": true
376 | },
377 | "concat-stream": {
378 | "version": "1.6.0",
379 | "resolved": "http://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
380 | "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
381 | "dev": true,
382 | "requires": {
383 | "inherits": "^2.0.3",
384 | "readable-stream": "^2.2.2",
385 | "typedarray": "^0.0.6"
386 | }
387 | },
388 | "core-js": {
389 | "version": "2.6.1",
390 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.1.tgz",
391 | "integrity": "sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg==",
392 | "dev": true
393 | },
394 | "core-util-is": {
395 | "version": "1.0.2",
396 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
397 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
398 | "dev": true
399 | },
400 | "cross-spawn": {
401 | "version": "6.0.5",
402 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
403 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
404 | "dev": true,
405 | "requires": {
406 | "nice-try": "^1.0.4",
407 | "path-key": "^2.0.1",
408 | "semver": "^5.5.0",
409 | "shebang-command": "^1.2.0",
410 | "which": "^1.2.9"
411 | }
412 | },
413 | "cypress": {
414 | "version": "3.1.4",
415 | "resolved": "https://registry.npmjs.org/cypress/-/cypress-3.1.4.tgz",
416 | "integrity": "sha512-8VJYtCAFqHXMnRDo4vdomR2CqfmhtReoplmbkXVspeKhKxU8WsZl0Nh5yeil8txxhq+YQwDrInItUqIm35Vw+g==",
417 | "dev": true,
418 | "requires": {
419 | "@cypress/listr-verbose-renderer": "0.4.1",
420 | "@cypress/xvfb": "1.2.3",
421 | "@types/blob-util": "1.3.3",
422 | "@types/bluebird": "3.5.18",
423 | "@types/chai": "4.0.8",
424 | "@types/chai-jquery": "1.1.35",
425 | "@types/jquery": "3.3.6",
426 | "@types/lodash": "4.14.87",
427 | "@types/minimatch": "3.0.3",
428 | "@types/mocha": "2.2.44",
429 | "@types/sinon": "7.0.0",
430 | "@types/sinon-chai": "2.7.29",
431 | "bluebird": "3.5.0",
432 | "cachedir": "1.3.0",
433 | "chalk": "2.4.1",
434 | "check-more-types": "2.24.0",
435 | "commander": "2.11.0",
436 | "common-tags": "1.4.0",
437 | "debug": "3.1.0",
438 | "execa": "0.10.0",
439 | "executable": "4.1.1",
440 | "extract-zip": "1.6.6",
441 | "fs-extra": "4.0.1",
442 | "getos": "3.1.0",
443 | "glob": "7.1.2",
444 | "is-ci": "1.0.10",
445 | "is-installed-globally": "0.1.0",
446 | "lazy-ass": "1.6.0",
447 | "listr": "0.12.0",
448 | "lodash": "4.17.11",
449 | "log-symbols": "2.2.0",
450 | "minimist": "1.2.0",
451 | "moment": "2.22.2",
452 | "ramda": "0.24.1",
453 | "request": "2.87.0",
454 | "request-progress": "0.3.1",
455 | "supports-color": "5.1.0",
456 | "tmp": "0.0.31",
457 | "url": "0.11.0",
458 | "yauzl": "2.8.0"
459 | }
460 | },
461 | "dashdash": {
462 | "version": "1.14.1",
463 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
464 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
465 | "dev": true,
466 | "requires": {
467 | "assert-plus": "^1.0.0"
468 | }
469 | },
470 | "date-fns": {
471 | "version": "1.30.1",
472 | "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz",
473 | "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==",
474 | "dev": true
475 | },
476 | "debug": {
477 | "version": "3.1.0",
478 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
479 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
480 | "dev": true,
481 | "requires": {
482 | "ms": "2.0.0"
483 | }
484 | },
485 | "delayed-stream": {
486 | "version": "1.0.0",
487 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
488 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
489 | "dev": true
490 | },
491 | "ecc-jsbn": {
492 | "version": "0.1.2",
493 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
494 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
495 | "dev": true,
496 | "requires": {
497 | "jsbn": "~0.1.0",
498 | "safer-buffer": "^2.1.0"
499 | }
500 | },
501 | "elegant-spinner": {
502 | "version": "1.0.1",
503 | "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz",
504 | "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=",
505 | "dev": true
506 | },
507 | "escape-string-regexp": {
508 | "version": "1.0.5",
509 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
510 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
511 | "dev": true
512 | },
513 | "execa": {
514 | "version": "0.10.0",
515 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz",
516 | "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==",
517 | "dev": true,
518 | "requires": {
519 | "cross-spawn": "^6.0.0",
520 | "get-stream": "^3.0.0",
521 | "is-stream": "^1.1.0",
522 | "npm-run-path": "^2.0.0",
523 | "p-finally": "^1.0.0",
524 | "signal-exit": "^3.0.0",
525 | "strip-eof": "^1.0.0"
526 | }
527 | },
528 | "executable": {
529 | "version": "4.1.1",
530 | "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
531 | "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
532 | "dev": true,
533 | "requires": {
534 | "pify": "^2.2.0"
535 | }
536 | },
537 | "exit-hook": {
538 | "version": "1.1.1",
539 | "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
540 | "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=",
541 | "dev": true
542 | },
543 | "extend": {
544 | "version": "3.0.2",
545 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
546 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
547 | "dev": true
548 | },
549 | "extract-zip": {
550 | "version": "1.6.6",
551 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz",
552 | "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=",
553 | "dev": true,
554 | "requires": {
555 | "concat-stream": "1.6.0",
556 | "debug": "2.6.9",
557 | "mkdirp": "0.5.0",
558 | "yauzl": "2.4.1"
559 | },
560 | "dependencies": {
561 | "debug": {
562 | "version": "2.6.9",
563 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
564 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
565 | "dev": true,
566 | "requires": {
567 | "ms": "2.0.0"
568 | }
569 | },
570 | "yauzl": {
571 | "version": "2.4.1",
572 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
573 | "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
574 | "dev": true,
575 | "requires": {
576 | "fd-slicer": "~1.0.1"
577 | }
578 | }
579 | }
580 | },
581 | "extsprintf": {
582 | "version": "1.3.0",
583 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
584 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
585 | "dev": true
586 | },
587 | "fast-deep-equal": {
588 | "version": "1.1.0",
589 | "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
590 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
591 | "dev": true
592 | },
593 | "fast-json-stable-stringify": {
594 | "version": "2.0.0",
595 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
596 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
597 | "dev": true
598 | },
599 | "fd-slicer": {
600 | "version": "1.0.1",
601 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
602 | "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
603 | "dev": true,
604 | "requires": {
605 | "pend": "~1.2.0"
606 | }
607 | },
608 | "figures": {
609 | "version": "1.7.0",
610 | "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
611 | "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
612 | "dev": true,
613 | "requires": {
614 | "escape-string-regexp": "^1.0.5",
615 | "object-assign": "^4.1.0"
616 | }
617 | },
618 | "forever-agent": {
619 | "version": "0.6.1",
620 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
621 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
622 | "dev": true
623 | },
624 | "form-data": {
625 | "version": "2.3.3",
626 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
627 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
628 | "dev": true,
629 | "requires": {
630 | "asynckit": "^0.4.0",
631 | "combined-stream": "^1.0.6",
632 | "mime-types": "^2.1.12"
633 | }
634 | },
635 | "fs-extra": {
636 | "version": "4.0.1",
637 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.1.tgz",
638 | "integrity": "sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA=",
639 | "dev": true,
640 | "requires": {
641 | "graceful-fs": "^4.1.2",
642 | "jsonfile": "^3.0.0",
643 | "universalify": "^0.1.0"
644 | }
645 | },
646 | "fs.realpath": {
647 | "version": "1.0.0",
648 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
649 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
650 | "dev": true
651 | },
652 | "get-stream": {
653 | "version": "3.0.0",
654 | "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
655 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
656 | "dev": true
657 | },
658 | "getos": {
659 | "version": "3.1.0",
660 | "resolved": "https://registry.npmjs.org/getos/-/getos-3.1.0.tgz",
661 | "integrity": "sha512-i9vrxtDu5DlLVFcrbqUqGWYlZN/zZ4pGMICCAcZoYsX3JA54nYp8r5EThw5K+m2q3wszkx4Th746JstspB0H4Q==",
662 | "dev": true,
663 | "requires": {
664 | "async": "2.4.0"
665 | }
666 | },
667 | "getpass": {
668 | "version": "0.1.7",
669 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
670 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
671 | "dev": true,
672 | "requires": {
673 | "assert-plus": "^1.0.0"
674 | }
675 | },
676 | "glob": {
677 | "version": "7.1.2",
678 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
679 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
680 | "dev": true,
681 | "requires": {
682 | "fs.realpath": "^1.0.0",
683 | "inflight": "^1.0.4",
684 | "inherits": "2",
685 | "minimatch": "^3.0.4",
686 | "once": "^1.3.0",
687 | "path-is-absolute": "^1.0.0"
688 | }
689 | },
690 | "global-dirs": {
691 | "version": "0.1.1",
692 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
693 | "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
694 | "dev": true,
695 | "requires": {
696 | "ini": "^1.3.4"
697 | }
698 | },
699 | "graceful-fs": {
700 | "version": "4.1.15",
701 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
702 | "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
703 | "dev": true
704 | },
705 | "har-schema": {
706 | "version": "2.0.0",
707 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
708 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
709 | "dev": true
710 | },
711 | "har-validator": {
712 | "version": "5.0.3",
713 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
714 | "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
715 | "dev": true,
716 | "requires": {
717 | "ajv": "^5.1.0",
718 | "har-schema": "^2.0.0"
719 | }
720 | },
721 | "has-ansi": {
722 | "version": "2.0.0",
723 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
724 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
725 | "dev": true,
726 | "requires": {
727 | "ansi-regex": "^2.0.0"
728 | }
729 | },
730 | "has-flag": {
731 | "version": "3.0.0",
732 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
733 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
734 | "dev": true
735 | },
736 | "http-signature": {
737 | "version": "1.2.0",
738 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
739 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
740 | "dev": true,
741 | "requires": {
742 | "assert-plus": "^1.0.0",
743 | "jsprim": "^1.2.2",
744 | "sshpk": "^1.7.0"
745 | }
746 | },
747 | "indent-string": {
748 | "version": "2.1.0",
749 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
750 | "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
751 | "dev": true,
752 | "requires": {
753 | "repeating": "^2.0.0"
754 | }
755 | },
756 | "inflight": {
757 | "version": "1.0.6",
758 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
759 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
760 | "dev": true,
761 | "requires": {
762 | "once": "^1.3.0",
763 | "wrappy": "1"
764 | }
765 | },
766 | "inherits": {
767 | "version": "2.0.3",
768 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
769 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
770 | "dev": true
771 | },
772 | "ini": {
773 | "version": "1.3.5",
774 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
775 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
776 | "dev": true
777 | },
778 | "is-ci": {
779 | "version": "1.0.10",
780 | "resolved": "http://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz",
781 | "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=",
782 | "dev": true,
783 | "requires": {
784 | "ci-info": "^1.0.0"
785 | }
786 | },
787 | "is-finite": {
788 | "version": "1.0.2",
789 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
790 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
791 | "dev": true,
792 | "requires": {
793 | "number-is-nan": "^1.0.0"
794 | }
795 | },
796 | "is-fullwidth-code-point": {
797 | "version": "1.0.0",
798 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
799 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
800 | "dev": true,
801 | "requires": {
802 | "number-is-nan": "^1.0.0"
803 | }
804 | },
805 | "is-installed-globally": {
806 | "version": "0.1.0",
807 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
808 | "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
809 | "dev": true,
810 | "requires": {
811 | "global-dirs": "^0.1.0",
812 | "is-path-inside": "^1.0.0"
813 | }
814 | },
815 | "is-path-inside": {
816 | "version": "1.0.1",
817 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
818 | "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
819 | "dev": true,
820 | "requires": {
821 | "path-is-inside": "^1.0.1"
822 | }
823 | },
824 | "is-promise": {
825 | "version": "2.1.0",
826 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
827 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
828 | "dev": true
829 | },
830 | "is-stream": {
831 | "version": "1.1.0",
832 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
833 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
834 | "dev": true
835 | },
836 | "is-typedarray": {
837 | "version": "1.0.0",
838 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
839 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
840 | "dev": true
841 | },
842 | "isarray": {
843 | "version": "1.0.0",
844 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
845 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
846 | "dev": true
847 | },
848 | "isexe": {
849 | "version": "2.0.0",
850 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
851 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
852 | "dev": true
853 | },
854 | "isstream": {
855 | "version": "0.1.2",
856 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
857 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
858 | "dev": true
859 | },
860 | "jsbn": {
861 | "version": "0.1.1",
862 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
863 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
864 | "dev": true
865 | },
866 | "json-schema": {
867 | "version": "0.2.3",
868 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
869 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
870 | "dev": true
871 | },
872 | "json-schema-traverse": {
873 | "version": "0.3.1",
874 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
875 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
876 | "dev": true
877 | },
878 | "json-stringify-safe": {
879 | "version": "5.0.1",
880 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
881 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
882 | "dev": true
883 | },
884 | "jsonfile": {
885 | "version": "3.0.1",
886 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
887 | "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
888 | "dev": true,
889 | "requires": {
890 | "graceful-fs": "^4.1.6"
891 | }
892 | },
893 | "jsprim": {
894 | "version": "1.4.1",
895 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
896 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
897 | "dev": true,
898 | "requires": {
899 | "assert-plus": "1.0.0",
900 | "extsprintf": "1.3.0",
901 | "json-schema": "0.2.3",
902 | "verror": "1.10.0"
903 | }
904 | },
905 | "lazy-ass": {
906 | "version": "1.6.0",
907 | "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
908 | "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=",
909 | "dev": true
910 | },
911 | "listr": {
912 | "version": "0.12.0",
913 | "resolved": "https://registry.npmjs.org/listr/-/listr-0.12.0.tgz",
914 | "integrity": "sha1-a84sD1YD+klYDqF81qAMwOX6RRo=",
915 | "dev": true,
916 | "requires": {
917 | "chalk": "^1.1.3",
918 | "cli-truncate": "^0.2.1",
919 | "figures": "^1.7.0",
920 | "indent-string": "^2.1.0",
921 | "is-promise": "^2.1.0",
922 | "is-stream": "^1.1.0",
923 | "listr-silent-renderer": "^1.1.1",
924 | "listr-update-renderer": "^0.2.0",
925 | "listr-verbose-renderer": "^0.4.0",
926 | "log-symbols": "^1.0.2",
927 | "log-update": "^1.0.2",
928 | "ora": "^0.2.3",
929 | "p-map": "^1.1.1",
930 | "rxjs": "^5.0.0-beta.11",
931 | "stream-to-observable": "^0.1.0",
932 | "strip-ansi": "^3.0.1"
933 | },
934 | "dependencies": {
935 | "chalk": {
936 | "version": "1.1.3",
937 | "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
938 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
939 | "dev": true,
940 | "requires": {
941 | "ansi-styles": "^2.2.1",
942 | "escape-string-regexp": "^1.0.2",
943 | "has-ansi": "^2.0.0",
944 | "strip-ansi": "^3.0.0",
945 | "supports-color": "^2.0.0"
946 | }
947 | },
948 | "log-symbols": {
949 | "version": "1.0.2",
950 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
951 | "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
952 | "dev": true,
953 | "requires": {
954 | "chalk": "^1.0.0"
955 | }
956 | },
957 | "supports-color": {
958 | "version": "2.0.0",
959 | "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
960 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
961 | "dev": true
962 | }
963 | }
964 | },
965 | "listr-silent-renderer": {
966 | "version": "1.1.1",
967 | "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz",
968 | "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=",
969 | "dev": true
970 | },
971 | "listr-update-renderer": {
972 | "version": "0.2.0",
973 | "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz",
974 | "integrity": "sha1-yoDhd5tOcCZoB+ju0a1qvjmFUPk=",
975 | "dev": true,
976 | "requires": {
977 | "chalk": "^1.1.3",
978 | "cli-truncate": "^0.2.1",
979 | "elegant-spinner": "^1.0.1",
980 | "figures": "^1.7.0",
981 | "indent-string": "^3.0.0",
982 | "log-symbols": "^1.0.2",
983 | "log-update": "^1.0.2",
984 | "strip-ansi": "^3.0.1"
985 | },
986 | "dependencies": {
987 | "chalk": {
988 | "version": "1.1.3",
989 | "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
990 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
991 | "dev": true,
992 | "requires": {
993 | "ansi-styles": "^2.2.1",
994 | "escape-string-regexp": "^1.0.2",
995 | "has-ansi": "^2.0.0",
996 | "strip-ansi": "^3.0.0",
997 | "supports-color": "^2.0.0"
998 | }
999 | },
1000 | "indent-string": {
1001 | "version": "3.2.0",
1002 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
1003 | "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
1004 | "dev": true
1005 | },
1006 | "log-symbols": {
1007 | "version": "1.0.2",
1008 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
1009 | "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
1010 | "dev": true,
1011 | "requires": {
1012 | "chalk": "^1.0.0"
1013 | }
1014 | },
1015 | "supports-color": {
1016 | "version": "2.0.0",
1017 | "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
1018 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
1019 | "dev": true
1020 | }
1021 | }
1022 | },
1023 | "listr-verbose-renderer": {
1024 | "version": "0.4.1",
1025 | "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz",
1026 | "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=",
1027 | "dev": true,
1028 | "requires": {
1029 | "chalk": "^1.1.3",
1030 | "cli-cursor": "^1.0.2",
1031 | "date-fns": "^1.27.2",
1032 | "figures": "^1.7.0"
1033 | },
1034 | "dependencies": {
1035 | "chalk": {
1036 | "version": "1.1.3",
1037 | "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
1038 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
1039 | "dev": true,
1040 | "requires": {
1041 | "ansi-styles": "^2.2.1",
1042 | "escape-string-regexp": "^1.0.2",
1043 | "has-ansi": "^2.0.0",
1044 | "strip-ansi": "^3.0.0",
1045 | "supports-color": "^2.0.0"
1046 | }
1047 | },
1048 | "supports-color": {
1049 | "version": "2.0.0",
1050 | "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
1051 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
1052 | "dev": true
1053 | }
1054 | }
1055 | },
1056 | "lodash": {
1057 | "version": "4.17.11",
1058 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
1059 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
1060 | "dev": true
1061 | },
1062 | "lodash.once": {
1063 | "version": "4.1.1",
1064 | "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
1065 | "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=",
1066 | "dev": true
1067 | },
1068 | "log-symbols": {
1069 | "version": "2.2.0",
1070 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
1071 | "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
1072 | "dev": true,
1073 | "requires": {
1074 | "chalk": "^2.0.1"
1075 | }
1076 | },
1077 | "log-update": {
1078 | "version": "1.0.2",
1079 | "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz",
1080 | "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=",
1081 | "dev": true,
1082 | "requires": {
1083 | "ansi-escapes": "^1.0.0",
1084 | "cli-cursor": "^1.0.2"
1085 | }
1086 | },
1087 | "mime-db": {
1088 | "version": "1.37.0",
1089 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
1090 | "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==",
1091 | "dev": true
1092 | },
1093 | "mime-types": {
1094 | "version": "2.1.21",
1095 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
1096 | "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
1097 | "dev": true,
1098 | "requires": {
1099 | "mime-db": "~1.37.0"
1100 | }
1101 | },
1102 | "minimatch": {
1103 | "version": "3.0.4",
1104 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1105 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1106 | "dev": true,
1107 | "requires": {
1108 | "brace-expansion": "^1.1.7"
1109 | }
1110 | },
1111 | "minimist": {
1112 | "version": "1.2.0",
1113 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
1114 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
1115 | "dev": true
1116 | },
1117 | "mkdirp": {
1118 | "version": "0.5.0",
1119 | "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
1120 | "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=",
1121 | "dev": true,
1122 | "requires": {
1123 | "minimist": "0.0.8"
1124 | },
1125 | "dependencies": {
1126 | "minimist": {
1127 | "version": "0.0.8",
1128 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1129 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
1130 | "dev": true
1131 | }
1132 | }
1133 | },
1134 | "moment": {
1135 | "version": "2.22.2",
1136 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz",
1137 | "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=",
1138 | "dev": true
1139 | },
1140 | "ms": {
1141 | "version": "2.0.0",
1142 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1143 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
1144 | "dev": true
1145 | },
1146 | "nice-try": {
1147 | "version": "1.0.5",
1148 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
1149 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
1150 | "dev": true
1151 | },
1152 | "npm-run-path": {
1153 | "version": "2.0.2",
1154 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
1155 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
1156 | "dev": true,
1157 | "requires": {
1158 | "path-key": "^2.0.0"
1159 | }
1160 | },
1161 | "number-is-nan": {
1162 | "version": "1.0.1",
1163 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
1164 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
1165 | "dev": true
1166 | },
1167 | "oauth-sign": {
1168 | "version": "0.8.2",
1169 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
1170 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
1171 | "dev": true
1172 | },
1173 | "object-assign": {
1174 | "version": "4.1.1",
1175 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1176 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
1177 | "dev": true
1178 | },
1179 | "once": {
1180 | "version": "1.4.0",
1181 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1182 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1183 | "dev": true,
1184 | "requires": {
1185 | "wrappy": "1"
1186 | }
1187 | },
1188 | "onetime": {
1189 | "version": "1.1.0",
1190 | "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
1191 | "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
1192 | "dev": true
1193 | },
1194 | "ora": {
1195 | "version": "0.2.3",
1196 | "resolved": "http://registry.npmjs.org/ora/-/ora-0.2.3.tgz",
1197 | "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=",
1198 | "dev": true,
1199 | "requires": {
1200 | "chalk": "^1.1.1",
1201 | "cli-cursor": "^1.0.2",
1202 | "cli-spinners": "^0.1.2",
1203 | "object-assign": "^4.0.1"
1204 | },
1205 | "dependencies": {
1206 | "chalk": {
1207 | "version": "1.1.3",
1208 | "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
1209 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
1210 | "dev": true,
1211 | "requires": {
1212 | "ansi-styles": "^2.2.1",
1213 | "escape-string-regexp": "^1.0.2",
1214 | "has-ansi": "^2.0.0",
1215 | "strip-ansi": "^3.0.0",
1216 | "supports-color": "^2.0.0"
1217 | }
1218 | },
1219 | "supports-color": {
1220 | "version": "2.0.0",
1221 | "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
1222 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
1223 | "dev": true
1224 | }
1225 | }
1226 | },
1227 | "os-homedir": {
1228 | "version": "1.0.2",
1229 | "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
1230 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
1231 | "dev": true
1232 | },
1233 | "os-tmpdir": {
1234 | "version": "1.0.2",
1235 | "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
1236 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
1237 | "dev": true
1238 | },
1239 | "p-finally": {
1240 | "version": "1.0.0",
1241 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
1242 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
1243 | "dev": true
1244 | },
1245 | "p-map": {
1246 | "version": "1.2.0",
1247 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
1248 | "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
1249 | "dev": true
1250 | },
1251 | "path-is-absolute": {
1252 | "version": "1.0.1",
1253 | "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1254 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1255 | "dev": true
1256 | },
1257 | "path-is-inside": {
1258 | "version": "1.0.2",
1259 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
1260 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
1261 | "dev": true
1262 | },
1263 | "path-key": {
1264 | "version": "2.0.1",
1265 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
1266 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
1267 | "dev": true
1268 | },
1269 | "pend": {
1270 | "version": "1.2.0",
1271 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
1272 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
1273 | "dev": true
1274 | },
1275 | "performance-now": {
1276 | "version": "2.1.0",
1277 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
1278 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
1279 | "dev": true
1280 | },
1281 | "pify": {
1282 | "version": "2.3.0",
1283 | "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1284 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
1285 | "dev": true
1286 | },
1287 | "process-nextick-args": {
1288 | "version": "2.0.0",
1289 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
1290 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
1291 | "dev": true
1292 | },
1293 | "punycode": {
1294 | "version": "1.4.1",
1295 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
1296 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
1297 | "dev": true
1298 | },
1299 | "qs": {
1300 | "version": "6.5.2",
1301 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
1302 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
1303 | "dev": true
1304 | },
1305 | "querystring": {
1306 | "version": "0.2.0",
1307 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
1308 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
1309 | "dev": true
1310 | },
1311 | "ramda": {
1312 | "version": "0.24.1",
1313 | "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.24.1.tgz",
1314 | "integrity": "sha1-w7d1UZfzW43DUCIoJixMkd22uFc=",
1315 | "dev": true
1316 | },
1317 | "readable-stream": {
1318 | "version": "2.3.6",
1319 | "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
1320 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
1321 | "dev": true,
1322 | "requires": {
1323 | "core-util-is": "~1.0.0",
1324 | "inherits": "~2.0.3",
1325 | "isarray": "~1.0.0",
1326 | "process-nextick-args": "~2.0.0",
1327 | "safe-buffer": "~5.1.1",
1328 | "string_decoder": "~1.1.1",
1329 | "util-deprecate": "~1.0.1"
1330 | }
1331 | },
1332 | "regenerator-runtime": {
1333 | "version": "0.11.1",
1334 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
1335 | "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
1336 | "dev": true
1337 | },
1338 | "repeating": {
1339 | "version": "2.0.1",
1340 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
1341 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
1342 | "dev": true,
1343 | "requires": {
1344 | "is-finite": "^1.0.0"
1345 | }
1346 | },
1347 | "request": {
1348 | "version": "2.87.0",
1349 | "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz",
1350 | "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",
1351 | "dev": true,
1352 | "requires": {
1353 | "aws-sign2": "~0.7.0",
1354 | "aws4": "^1.6.0",
1355 | "caseless": "~0.12.0",
1356 | "combined-stream": "~1.0.5",
1357 | "extend": "~3.0.1",
1358 | "forever-agent": "~0.6.1",
1359 | "form-data": "~2.3.1",
1360 | "har-validator": "~5.0.3",
1361 | "http-signature": "~1.2.0",
1362 | "is-typedarray": "~1.0.0",
1363 | "isstream": "~0.1.2",
1364 | "json-stringify-safe": "~5.0.1",
1365 | "mime-types": "~2.1.17",
1366 | "oauth-sign": "~0.8.2",
1367 | "performance-now": "^2.1.0",
1368 | "qs": "~6.5.1",
1369 | "safe-buffer": "^5.1.1",
1370 | "tough-cookie": "~2.3.3",
1371 | "tunnel-agent": "^0.6.0",
1372 | "uuid": "^3.1.0"
1373 | }
1374 | },
1375 | "request-progress": {
1376 | "version": "0.3.1",
1377 | "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz",
1378 | "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=",
1379 | "dev": true,
1380 | "requires": {
1381 | "throttleit": "~0.0.2"
1382 | }
1383 | },
1384 | "restore-cursor": {
1385 | "version": "1.0.1",
1386 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
1387 | "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
1388 | "dev": true,
1389 | "requires": {
1390 | "exit-hook": "^1.0.0",
1391 | "onetime": "^1.0.0"
1392 | }
1393 | },
1394 | "rxjs": {
1395 | "version": "5.5.12",
1396 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz",
1397 | "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==",
1398 | "dev": true,
1399 | "requires": {
1400 | "symbol-observable": "1.0.1"
1401 | }
1402 | },
1403 | "safe-buffer": {
1404 | "version": "5.1.2",
1405 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1406 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
1407 | "dev": true
1408 | },
1409 | "safer-buffer": {
1410 | "version": "2.1.2",
1411 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1412 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
1413 | "dev": true
1414 | },
1415 | "semver": {
1416 | "version": "5.6.0",
1417 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
1418 | "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
1419 | "dev": true
1420 | },
1421 | "shebang-command": {
1422 | "version": "1.2.0",
1423 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
1424 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
1425 | "dev": true,
1426 | "requires": {
1427 | "shebang-regex": "^1.0.0"
1428 | }
1429 | },
1430 | "shebang-regex": {
1431 | "version": "1.0.0",
1432 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
1433 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
1434 | "dev": true
1435 | },
1436 | "signal-exit": {
1437 | "version": "3.0.2",
1438 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
1439 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
1440 | "dev": true
1441 | },
1442 | "slice-ansi": {
1443 | "version": "0.0.4",
1444 | "resolved": "http://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
1445 | "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
1446 | "dev": true
1447 | },
1448 | "sshpk": {
1449 | "version": "1.16.0",
1450 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz",
1451 | "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==",
1452 | "dev": true,
1453 | "requires": {
1454 | "asn1": "~0.2.3",
1455 | "assert-plus": "^1.0.0",
1456 | "bcrypt-pbkdf": "^1.0.0",
1457 | "dashdash": "^1.12.0",
1458 | "ecc-jsbn": "~0.1.1",
1459 | "getpass": "^0.1.1",
1460 | "jsbn": "~0.1.0",
1461 | "safer-buffer": "^2.0.2",
1462 | "tweetnacl": "~0.14.0"
1463 | }
1464 | },
1465 | "stream-to-observable": {
1466 | "version": "0.1.0",
1467 | "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.1.0.tgz",
1468 | "integrity": "sha1-Rb8dny19wJvtgfHDB8Qw5ouEz/4=",
1469 | "dev": true
1470 | },
1471 | "string-width": {
1472 | "version": "1.0.2",
1473 | "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
1474 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
1475 | "dev": true,
1476 | "requires": {
1477 | "code-point-at": "^1.0.0",
1478 | "is-fullwidth-code-point": "^1.0.0",
1479 | "strip-ansi": "^3.0.0"
1480 | }
1481 | },
1482 | "string_decoder": {
1483 | "version": "1.1.1",
1484 | "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1485 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
1486 | "dev": true,
1487 | "requires": {
1488 | "safe-buffer": "~5.1.0"
1489 | }
1490 | },
1491 | "strip-ansi": {
1492 | "version": "3.0.1",
1493 | "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
1494 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
1495 | "dev": true,
1496 | "requires": {
1497 | "ansi-regex": "^2.0.0"
1498 | }
1499 | },
1500 | "strip-eof": {
1501 | "version": "1.0.0",
1502 | "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
1503 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
1504 | "dev": true
1505 | },
1506 | "supports-color": {
1507 | "version": "5.1.0",
1508 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz",
1509 | "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==",
1510 | "dev": true,
1511 | "requires": {
1512 | "has-flag": "^2.0.0"
1513 | },
1514 | "dependencies": {
1515 | "has-flag": {
1516 | "version": "2.0.0",
1517 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
1518 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
1519 | "dev": true
1520 | }
1521 | }
1522 | },
1523 | "symbol-observable": {
1524 | "version": "1.0.1",
1525 | "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz",
1526 | "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=",
1527 | "dev": true
1528 | },
1529 | "throttleit": {
1530 | "version": "0.0.2",
1531 | "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz",
1532 | "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=",
1533 | "dev": true
1534 | },
1535 | "tmp": {
1536 | "version": "0.0.31",
1537 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz",
1538 | "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=",
1539 | "dev": true,
1540 | "requires": {
1541 | "os-tmpdir": "~1.0.1"
1542 | }
1543 | },
1544 | "tough-cookie": {
1545 | "version": "2.3.4",
1546 | "resolved": "http://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
1547 | "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
1548 | "dev": true,
1549 | "requires": {
1550 | "punycode": "^1.4.1"
1551 | }
1552 | },
1553 | "tunnel-agent": {
1554 | "version": "0.6.0",
1555 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
1556 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
1557 | "dev": true,
1558 | "requires": {
1559 | "safe-buffer": "^5.0.1"
1560 | }
1561 | },
1562 | "tweetnacl": {
1563 | "version": "0.14.5",
1564 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
1565 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
1566 | "dev": true
1567 | },
1568 | "typedarray": {
1569 | "version": "0.0.6",
1570 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
1571 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
1572 | "dev": true
1573 | },
1574 | "universalify": {
1575 | "version": "0.1.2",
1576 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
1577 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
1578 | "dev": true
1579 | },
1580 | "url": {
1581 | "version": "0.11.0",
1582 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
1583 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
1584 | "dev": true,
1585 | "requires": {
1586 | "punycode": "1.3.2",
1587 | "querystring": "0.2.0"
1588 | },
1589 | "dependencies": {
1590 | "punycode": {
1591 | "version": "1.3.2",
1592 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
1593 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
1594 | "dev": true
1595 | }
1596 | }
1597 | },
1598 | "util-deprecate": {
1599 | "version": "1.0.2",
1600 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1601 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
1602 | "dev": true
1603 | },
1604 | "uuid": {
1605 | "version": "3.3.2",
1606 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
1607 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
1608 | "dev": true
1609 | },
1610 | "verror": {
1611 | "version": "1.10.0",
1612 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
1613 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
1614 | "dev": true,
1615 | "requires": {
1616 | "assert-plus": "^1.0.0",
1617 | "core-util-is": "1.0.2",
1618 | "extsprintf": "^1.2.0"
1619 | }
1620 | },
1621 | "which": {
1622 | "version": "1.3.1",
1623 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
1624 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
1625 | "dev": true,
1626 | "requires": {
1627 | "isexe": "^2.0.0"
1628 | }
1629 | },
1630 | "wrappy": {
1631 | "version": "1.0.2",
1632 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1633 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1634 | "dev": true
1635 | },
1636 | "yauzl": {
1637 | "version": "2.8.0",
1638 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.8.0.tgz",
1639 | "integrity": "sha1-eUUK/yKyqcWkHvVOAtuQfM+/nuI=",
1640 | "dev": true,
1641 | "requires": {
1642 | "buffer-crc32": "~0.2.3",
1643 | "fd-slicer": "~1.0.1"
1644 | }
1645 | }
1646 | }
1647 | }
1648 |
--------------------------------------------------------------------------------
/tests/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "e2e-tests-using-docker-cypress-vuejs-golang-postgres",
3 | "version": "1.0.0",
4 | "description": "",
5 | "scripts": {
6 | "test": "npx cypress run",
7 | "open": "npx cypress open"
8 | },
9 | "author": "Gustavo Henrique",
10 | "license": "MIT",
11 | "devDependencies": {
12 | "cypress": "^3.1.4"
13 | },
14 | "dependencies": {}
15 | }
16 |
--------------------------------------------------------------------------------
/tests/resetdb.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | echo "Reseting database..."
3 | psql "${DATABASE_URL}" <