Skip to content

Commit bc924cd

Browse files
committed
Calculate file paths(schema and body) based on imposter path
1 parent d90d093 commit bc924cd

File tree

14 files changed

+41
-20
lines changed

14 files changed

+41
-20
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ imposters
1515
schemas
1616

1717
!test/testdata/imposters/
18-
!test/testdata/schemas/
18+
!test/testdata/imposters/schemas/

CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,7 @@
1717

1818
## v0.2.1 (2019/04/25)
1919

20-
* Allow imposter's matching by request schema
20+
* Allow imposter's matching by request schema
21+
* Dynamic responses based on regex endpoint or request schema
22+
* Calculate files directory(body and schema) based on imposters path
23+
* Update REAMDE.md with resolved features and new future features

handler.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ func writeBody(imposter Imposter, w http.ResponseWriter) {
7272
wb := []byte(imposter.Response.Body)
7373

7474
if imposter.Response.BodyFile != nil {
75-
wb = fetchBodyFromFile(*imposter.Response.BodyFile)
75+
bodyFile := imposter.CalculateFilePath(*imposter.Response.BodyFile)
76+
wb = fetchBodyFromFile(bodyFile)
7677
}
7778
w.Write(wb)
7879
}

handler_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ func TestImposterHandler(t *testing.T) {
2323
var headers = make(http.Header)
2424
headers.Add("Content-Type", "application/json")
2525

26-
schemaFile := "test/testdata/schemas/create_gopher_request.json"
27-
bodyFile := "test/testdata/responses/create_gopher_response.json"
28-
bodyFileFake := "test/testdata/responses/create_gopher_response_fail.json"
26+
schemaFile := "test/testdata/imposters/schemas/create_gopher_request.json"
27+
bodyFile := "test/testdata/imposters/responses/create_gopher_response.json"
28+
bodyFileFake := "test/testdata/imposters/responses/create_gopher_response_fail.json"
2929
body := `{"test":true}`
3030

3131
validRequest := Request{
@@ -123,7 +123,7 @@ func TestInvalidHeaders(t *testing.T) {
123123
}
124124
}
125125
}`)
126-
schemaFile := "test/testdata/schemas/create_gopher_request.json"
126+
schemaFile := "test/testdata/imposters/schemas/create_gopher_request.json"
127127
var expectedHeaders = make(http.Header)
128128
expectedHeaders.Add("Content-Type", "application/json")
129129
expectedHeaders.Add("Authorization", "Bearer gopher")

imposter.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,22 @@
11
package killgrave
22

3-
import "net/http"
3+
import (
4+
"net/http"
5+
"path"
6+
)
47

58
// Imposter define an imposter structure
69
type Imposter struct {
10+
BasePath string
711
Request Request `json:"request"`
812
Response Response `json:"response"`
913
}
1014

15+
// CalculateFilePath calculate file path based on basePath of imposter directory
16+
func (i *Imposter) CalculateFilePath(filePath string) string {
17+
return path.Join(i.BasePath, filePath)
18+
}
19+
1120
// Request represent the structure of real request
1221
type Request struct {
1322
Method string `json:"method"`
@@ -18,8 +27,8 @@ type Request struct {
1827

1928
// Response represent the structure of real response
2029
type Response struct {
21-
Status int `json:"status"`
22-
Body string `json:"body"`
23-
BodyFile *string `json:"bodyFile"`
24-
Headers *http.Header `json:"headers"`
30+
Status int `json:"status"`
31+
Body string `json:"body"`
32+
BodyFile *string `json:"bodyFile"`
33+
Headers *http.Header `json:"headers"`
2534
}

route_matchers.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@ func MatcherBySchema(imposter Imposter) mux.MatcherFunc {
1717
err := validateSchema(imposter, req)
1818

1919
// TODO: inject the logger
20-
log.Println(err)
21-
22-
return err == nil
20+
if err != nil {
21+
log.Println(err)
22+
return false
23+
}
24+
return true
2325
}
2426
}
2527

@@ -35,7 +37,7 @@ func validateSchema(imposter Imposter, req *http.Request) error {
3537
req.Body = ioutil.NopCloser(bytes.NewBuffer(b))
3638
}()
3739

38-
schemaFile := *imposter.Request.SchemaFile
40+
schemaFile := imposter.CalculateFilePath(*imposter.Request.SchemaFile)
3941
if _, err := os.Stat(schemaFile); os.IsNotExist(err) {
4042
return errors.Wrapf(err, "the schema file %s not found", schemaFile)
4143
}

route_matchers_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ func TestMatcherBySchema(t *testing.T) {
1212
bodyA := ioutil.NopCloser(bytes.NewReader([]byte("{\"type\": \"gopher\"}")))
1313
bodyB := ioutil.NopCloser(bytes.NewReader([]byte("{\"type\": \"cat\"}")))
1414

15-
schemaGopherFile := "test/testdata/schemas/type_gopher.json"
16-
schemaCatFile := "test/testdata/schemas/type_cat.json"
17-
schemeFailFile := "test/testdata/schemas/type_gopher_fail.json"
15+
schemaGopherFile := "test/testdata/imposters/schemas/type_gopher.json"
16+
schemaCatFile := "test/testdata/imposters/schemas/type_cat.json"
17+
schemeFailFile := "test/testdata/imposters/schemas/type_gopher_fail.json"
1818

1919
requestWithoutSchema := Request{
2020
Method: "POST",

server.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ func (s *Server) buildImposters() error {
4040
files, _ := ioutil.ReadDir(s.impostersPath)
4141

4242
for _, f := range files {
43+
if f.IsDir() {
44+
continue
45+
}
46+
4347
var imposter Imposter
4448
if err := s.buildImposter(f.Name(), &imposter); err != nil {
4549
return err
@@ -65,5 +69,7 @@ func (s *Server) buildImposter(imposterFileName string, imposter *Imposter) erro
6569
if err := json.Unmarshal(bytes, imposter); err != nil {
6670
return malformattedImposterError(fmt.Sprintf("error while unmarshall imposter file %s", f))
6771
}
72+
imposter.BasePath = s.impostersPath
73+
6874
return nil
6975
}

server_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ func TestRunServer(t *testing.T) {
1313
err error
1414
}{
1515
{"imposter directory not found", NewServer("failImposterPath", nil), invalidDirectoryError("error")},
16-
{"malformatted json", NewServer("test/testdata/malformatted", nil), malformattedImposterError("error")},
16+
{"malformatted json", NewServer("test/testdata/malformatted_imposters", nil), malformattedImposterError("error")},
1717
{"valid imposter", NewServer("test/testdata/imposters", mux.NewRouter()), nil},
1818
}
1919

test/testdata/responses/create_gopher_response.json renamed to test/testdata/imposters/responses/create_gopher_response.json

File renamed without changes.

0 commit comments

Comments
 (0)