4
1
Fork 0

Update Makefile and initial conversation_test
continuous-integration/drone/push Build is failing Details

pull/24/head
Ambrose Chua 2019-10-23 19:44:01 +08:00
parent 757930c6dc
commit f03de17d64
Signed by: ambrose
GPG Key ID: BC367D33F140B5C2
2 changed files with 189 additions and 10 deletions

View File

@ -1,23 +1,40 @@
GOCMD=go
GORUN=$(GOCMD) run
GOBUILD=$(GOCMD) build
GOCLEAN=$(GOCMD) clean
GOTEST=$(GOCMD) test
GOFMT_PROG=gofmt
DOCKERCOMPOSE=docker-compose
# See https://git.makerforce.io/beep/best-practices/wiki/Makefile
#
# Programs
#
GOCMD?=go
GORUN?=$(GOCMD) run
GOBUILD?=$(GOCMD) build
GOCLEAN?=$(GOCMD) clean
GOTEST?=$(GOCMD) test
GOFMT_PROG?=gofmt
DOCKERCOMPOSE?=docker-compose
#
# Local
#
BINARY_NAME=core
DOCKERCOMPOSE_INTEGRATION_CONFIG=docker-compose.integration.yml
#
# Files
#
DOCKERCOMPOSE_INTEGRATION_CONFIG?=docker-compose.integration.yml
all: test_unit build
#
# Tasks
#
# Let's do a quick unit test and then build backend-core
all: test_fmt test_unit build
build:
$(GOBUILD) -o $(BINARY_NAME) -v
test: test_unit test_integration
test: test_fmt test_unit test_integration
test_fmt:
$(GOFMT_PROG) -l .

162
conversation_test.go Normal file
View File

@ -0,0 +1,162 @@
// +build integration
package main
import (
"bytes"
"database/sql"
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"github.com/google/go-cmp/cmp"
)
func TestConversation(t *testing.T) {
db := connect()
defer db.Close()
h := NewHandler(db, nil)
r := NewRouter(h)
users := setupUsers(t, db, r)
t.Run("Create", testCreateConversation(db, r, users))
t.Run("Get", testGetConversations(db, r, users))
}
func setupUsers(t *testing.T, db *sql.DB, router http.Handler) []User {
users := []User{
User{
PhoneNumber: "+65 9999 0001",
FirstName: "Contact 1",
LastName: "User",
},
User{
PhoneNumber: "+65 9999 0002",
FirstName: "Contact 2",
LastName: "User",
},
User{
PhoneNumber: "+65 9999 0003",
FirstName: "Contact 3",
LastName: "User",
},
}
resultUsers := []User{}
for _, user := range users {
b, _ := json.Marshal(user)
w := httptest.NewRecorder()
r := httptest.NewRequest("POST", "/user", bytes.NewBuffer(b))
router.ServeHTTP(w, r)
assertCode(t, w, 200)
got := User{}
json.NewDecoder(w.Body).Decode(&got)
resultUsers = append(resultUsers, got)
}
return resultUsers
}
func testCreateConversation(db *sql.DB, router http.Handler, users []User) func(t *testing.T) {
return func(t *testing.T) {
// Setup
// Test
mockConversation := &Conversation{
Title: "Test Conversation 1",
DM: true,
}
b, _ := json.Marshal(mockConversation)
w := httptest.NewRecorder()
r := httptest.NewRequest("POST", "/user/conversation", bytes.NewBuffer(b))
claim, _ := json.Marshal(&RawClient{UserId: createdUser.ID, ClientId: "test"})
r.Header.Add("X-User-Claim", string(claim))
router.ServeHTTP(w, r)
assertCode(t, w, 200)
// Assert
got, want := User{}, users[0]
json.NewDecoder(w.Body).Decode(&got)
if diff := cmp.Diff(got, want); len(diff) != 0 {
t.Error(diff)
}
assertDB(t, db, `SELECT * FROM contact WHERE "user" = $1 AND contact = $2`, createdUser.ID, users[0].ID)
}
}
func testGetConversations(db *sql.DB, router http.Handler, users []User) func(t *testing.T) {
return func(t *testing.T) {
// Setup
mockUser := &User{
PhoneNumber: "+65 9999 1002",
FirstName: "ConversationOwner",
LastName: "User",
}
bs, _ := json.Marshal(mockUser)
ws := httptest.NewRecorder()
rs := httptest.NewRequest("POST", "/user", bytes.NewBuffer(bs))
router.ServeHTTP(ws, rs)
createdUser := new(User)
json.NewDecoder(ws.Body).Decode(createdUser)
b := []byte(`{"phone_number": "` + users[0].PhoneNumber + `"}`)
w := httptest.NewRecorder()
r := httptest.NewRequest("POST", "/user/contact", bytes.NewBuffer(b))
claim, _ := json.Marshal(&RawClient{UserId: createdUser.ID, ClientId: "test"})
r.Header.Add("X-User-Claim", string(claim))
router.ServeHTTP(w, r)
assertCode(t, w, 200)
b = []byte(`{"phone_number": "` + users[1].PhoneNumber + `"}`)
w = httptest.NewRecorder()
r = httptest.NewRequest("POST", "/user/contact", bytes.NewBuffer(b))
r.Header.Add("X-User-Claim", string(claim))
router.ServeHTTP(w, r)
assertCode(t, w, 200)
b = []byte(`{"phone_number": "` + users[2].PhoneNumber + `"}`)
w = httptest.NewRecorder()
r = httptest.NewRequest("POST", "/user/contact", bytes.NewBuffer(b))
r.Header.Add("X-User-Claim", string(claim))
router.ServeHTTP(w, r)
assertCode(t, w, 200)
// Test
w = httptest.NewRecorder()
r = httptest.NewRequest("GET", "/user/contact", nil)
r.Header.Add("X-User-Claim", string(claim))
router.ServeHTTP(w, r)
assertCode(t, w, 200)
// Assert
got, want := []User{}, users
json.NewDecoder(w.Body).Decode(&got)
if diff := cmp.Diff(got, want); len(diff) != 0 {
t.Error(diff)
}
}
}