team varible in unit test

This commit is contained in:
Jociele Padilha 2022-04-12 16:29:51 +02:00
parent 4744d601bc
commit 31fd283d9d
1 changed files with 243 additions and 242 deletions

View File

@ -1,242 +1,243 @@
package teams package teams
import ( import (
"fmt" "fmt"
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
"reflect" "reflect"
"testing" "testing"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
var ( var (
logger = logrus.New().WithField("pkg", "teamsapi") logger = logrus.New().WithField("pkg", "teamsapi")
token = "ec45b1cfbe7100c6315d183a3eb6cec0M2U1LWJkMzEtZDgzNzNmZGQyNGM3IiwiYXV0aF90aW1lIjoxNDkzNzMwNzQ1LCJpc3MiOiJodHRwcz" token = "ec45b1cfbe7100c6315d183a3eb6cec0M2U1LWJkMzEtZDgzNzNmZGQyNGM3IiwiYXV0aF90aW1lIjoxNDkzNzMwNzQ1LCJpc3MiOiJodHRwcz"
input = `{ input = `{
"dn": "cn=100100,ou=official,ou=foobar,dc=zalando,dc=net", "dn": "cn=100100,ou=official,ou=foobar,dc=zalando,dc=net",
"id": "acid", "id": "acid",
"id_name": "acid", "id_name": "acid",
"team_id": "111222", "team_id": "111222",
"type": "official", "type": "official",
"name": "Acid team name", "name": "Acid team name",
"mail": [ "mail": [
"email1@example.com", "email1@example.com",
"email2@example.com" "email2@example.com"
], ],
"alias": [ "alias": [
"acid" "acid"
], ],
"member": [ "member": [
"member1", "member1",
"member2", "member2",
"member3" "member3"
], ],
"infrastructure-accounts": [ "infrastructure-accounts": [
{ {
"id": "1234512345", "id": "1234512345",
"name": "acid", "name": "acid",
"provider": "aws", "provider": "aws",
"type": "aws", "type": "aws",
"description": "", "description": "",
"owner": "acid", "owner": "acid",
"owner_dn": "cn=100100,ou=official,ou=foobar,dc=zalando,dc=net", "owner_dn": "cn=100100,ou=official,ou=foobar,dc=zalando,dc=net",
"disabled": false "disabled": false
}, },
{ {
"id": "5432154321", "id": "5432154321",
"name": "db", "name": "db",
"provider": "aws", "provider": "aws",
"type": "aws", "type": "aws",
"description": "", "description": "",
"owner": "acid", "owner": "acid",
"owner_dn": "cn=100100,ou=official,ou=foobar,dc=zalando,dc=net", "owner_dn": "cn=100100,ou=official,ou=foobar,dc=zalando,dc=net",
"disabled": false "disabled": false
} }
], ],
"cost_center": "00099999", "cost_center": "00099999",
"delivery_lead": "member4", "delivery_lead": "member4",
"parent_team_id": "111221" "parent_team_id": "111221"
}` }`
) )
var teamsAPItc = []struct { var teamsAPItc = []struct {
in string in string
inCode int inCode int
out *Team inTeam string
err error out *Team
}{ err error
{ }{
input, {
200, input,
&Team{ 200,
Dn: "cn=100100,ou=official,ou=foobar,dc=zalando,dc=net", "acid",
ID: "acid", &Team{
TeamName: "acid", Dn: "cn=100100,ou=official,ou=foobar,dc=zalando,dc=net",
TeamID: "111222", ID: "acid",
Type: "official", TeamName: "acid",
FullName: "Acid team name", TeamID: "111222",
Aliases: []string{"acid"}, Type: "official",
Mails: []string{"email1@example.com", "email2@example.com"}, FullName: "Acid team name",
Members: []string{"member1", "member2", "member3"}, Aliases: []string{"acid"},
CostCenter: "00099999", Mails: []string{"email1@example.com", "email2@example.com"},
DeliveryLead: "member4", Members: []string{"member1", "member2", "member3"},
ParentTeamID: "111221", CostCenter: "00099999",
InfrastructureAccounts: []infrastructureAccount{ DeliveryLead: "member4",
{ ParentTeamID: "111221",
ID: "1234512345", InfrastructureAccounts: []infrastructureAccount{
Name: "acid", {
Provider: "aws", ID: "1234512345",
Type: "aws", Name: "acid",
Description: "", Provider: "aws",
Owner: "acid", Type: "aws",
OwnerDn: "cn=100100,ou=official,ou=foobar,dc=zalando,dc=net", Description: "",
Disabled: false}, Owner: "acid",
{ OwnerDn: "cn=100100,ou=official,ou=foobar,dc=zalando,dc=net",
ID: "5432154321", Disabled: false},
Name: "db", {
Provider: "aws", ID: "5432154321",
Type: "aws", Name: "db",
Description: "", Provider: "aws",
Owner: "acid", Type: "aws",
OwnerDn: "cn=100100,ou=official,ou=foobar,dc=zalando,dc=net", Description: "",
Disabled: false}, Owner: "acid",
}, OwnerDn: "cn=100100,ou=official,ou=foobar,dc=zalando,dc=net",
}, Disabled: false},
nil}, { },
`{"error": "Access Token not valid"}`, },
401, nil}, {
nil, `{"error": "Access Token not valid"}`,
fmt.Errorf(`team API query failed with status code 401 and message: '"Access Token not valid"'`), 401,
}, "acid",
{ nil,
`{"status": "I'm a teapot'"}`, fmt.Errorf(`team API query failed with status code 401 and message: '"Access Token not valid"'`),
418, },
nil, {
fmt.Errorf(`team API query failed with status code 418`), `{"status": "I'm a teapot'"}`,
}, 418,
{ "acid",
`{"status": "I'm a teapot`, nil,
418, fmt.Errorf(`team API query failed with status code 418`),
nil, },
fmt.Errorf(`team API query failed with status code 418 and malformed response: unexpected EOF`), {
}, `{"status": "I'm a teapot`,
{ 418,
`{"status": "I'm a teapot`, "acid",
200, nil,
nil, fmt.Errorf(`team API query failed with status code 418 and malformed response: unexpected EOF`),
fmt.Errorf(`could not parse team API response: unexpected EOF`), },
}, {
{ `{"status": "I'm a teapot`,
input, 200,
404, "acid",
nil, nil,
fmt.Errorf(`team API query failed with status code 404`), fmt.Errorf(`could not parse team API response: unexpected EOF`),
}, },
} {
input,
var requestsURLtc = []struct { 404,
url string "banana",
err error nil,
}{ fmt.Errorf(`team API query failed with status code 404`),
{ },
"coffee://localhost/", }
fmt.Errorf(`Get "coffee://localhost/teams/acid": unsupported protocol scheme "coffee"`),
}, var requestsURLtc = []struct {
{ url string
"http://192.168.0.%31/", err error
fmt.Errorf(`parse "http://192.168.0.%%31/teams/acid": invalid URL escape "%%31"`), }{
}, {
} "coffee://localhost/",
fmt.Errorf(`Get "coffee://localhost/teams/acid": unsupported protocol scheme "coffee"`),
func TestInfo(t *testing.T) { },
for _, tc := range teamsAPItc { {
func() { "http://192.168.0.%31/",
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Errorf(`parse "http://192.168.0.%%31/teams/acid": invalid URL escape "%%31"`),
if r.Header.Get("Authorization") != "Bearer "+token { },
t.Errorf("authorization token is wrong or not provided") }
}
w.WriteHeader(tc.inCode) func TestInfo(t *testing.T) {
if _, err := fmt.Fprint(w, tc.in); err != nil { for _, tc := range teamsAPItc {
t.Errorf("error writing teams api response %v", err) func() {
} ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
})) if r.Header.Get("Authorization") != "Bearer "+token {
defer ts.Close() t.Errorf("authorization token is wrong or not provided")
api := NewTeamsAPI(ts.URL, logger) }
w.WriteHeader(tc.inCode)
actual, _, err := api.TeamInfo("acid", token) if _, err := fmt.Fprint(w, tc.in); err != nil {
if err != nil && err.Error() != tc.err.Error() { t.Errorf("error writing teams api response %v", err)
t.Errorf("expected error: %v, got: %v", tc.err, err) }
return }))
} defer ts.Close()
api := NewTeamsAPI(ts.URL, logger)
if !reflect.DeepEqual(actual, tc.out) {
t.Errorf("expected %#v, got: %#v", tc.out, actual) actual, statusCode, err := api.TeamInfo(tc.inTeam, token)
} if err != nil && err.Error() != tc.err.Error() {
t.Errorf("expected error: %v, got: %v", tc.err, err)
_, statusCode, err := api.TeamInfo("sqlserver", token) return
if err != nil && err.Error() != tc.err.Error() { }
t.Errorf("expected error: %v, got: %v", tc.err, err)
return if !reflect.DeepEqual(actual, tc.out) {
} t.Errorf("expected %#v, got: %#v", tc.out, actual)
}
if statusCode != tc.inCode {
t.Errorf("expected %d, got: %d", tc.inCode, statusCode) if statusCode != tc.inCode {
} t.Errorf("expected %d, got: %d", tc.inCode, statusCode)
}() }
} }()
} }
}
type mockHTTPClient struct {
} type mockHTTPClient struct {
}
type mockBody struct {
} type mockBody struct {
}
func (b *mockBody) Read(p []byte) (n int, err error) {
return 2, nil func (b *mockBody) Read(p []byte) (n int, err error) {
} return 2, nil
}
func (b *mockBody) Close() error {
return fmt.Errorf("close error") func (b *mockBody) Close() error {
} return fmt.Errorf("close error")
}
func (c *mockHTTPClient) Do(req *http.Request) (*http.Response, error) {
resp := http.Response{ func (c *mockHTTPClient) Do(req *http.Request) (*http.Response, error) {
Status: "200 OK", resp := http.Response{
StatusCode: 200, Status: "200 OK",
ContentLength: 2, StatusCode: 200,
Close: false, ContentLength: 2,
Request: req, Close: false,
} Request: req,
resp.Body = &mockBody{} }
resp.Body = &mockBody{}
return &resp, nil
} return &resp, nil
}
func TestHttpClientClose(t *testing.T) {
ts := httptest.NewServer(nil) func TestHttpClientClose(t *testing.T) {
ts := httptest.NewServer(nil)
api := NewTeamsAPI(ts.URL, logger)
api.httpClient = &mockHTTPClient{} api := NewTeamsAPI(ts.URL, logger)
api.httpClient = &mockHTTPClient{}
_, _, err := api.TeamInfo("acid", token)
expError := fmt.Errorf("error when closing response: close error") _, _, err := api.TeamInfo("acid", token)
if err.Error() != expError.Error() { expError := fmt.Errorf("error when closing response: close error")
t.Errorf("expected error: %v, got: %v", expError, err) if err.Error() != expError.Error() {
} t.Errorf("expected error: %v, got: %v", expError, err)
} }
}
func TestRequest(t *testing.T) {
for _, tc := range requestsURLtc { func TestRequest(t *testing.T) {
api := NewTeamsAPI(tc.url, logger) for _, tc := range requestsURLtc {
resp, _, err := api.TeamInfo("acid", token) api := NewTeamsAPI(tc.url, logger)
if resp != nil { resp, _, err := api.TeamInfo("acid", token)
t.Errorf("response expected to be nil") if resp != nil {
continue t.Errorf("response expected to be nil")
} continue
}
if err.Error() != tc.err.Error() {
t.Errorf("expected error: %v, got: %v", tc.err, err) if err.Error() != tc.err.Error() {
} t.Errorf("expected error: %v, got: %v", tc.err, err)
} }
} }
}