11package parrot
22
33import (
4+ "encoding/json"
45 "flag"
56 "fmt"
67 "io"
@@ -76,14 +77,20 @@ func TestRegisteredRoute(t *testing.T) {
7677 ResponseStatusCode : 201 ,
7778 ResponseContentType : "text/plain" ,
7879 },
80+ {
81+ Method : http .MethodGet ,
82+ Path : "/json" ,
83+ ResponseBody : map [string ]any {"message" : "Squawk" },
84+ ResponseStatusCode : 200 ,
85+ ResponseContentType : "application/json" ,
86+ },
7987 }
8088
81- for _ , r := range routes {
82- route := r
89+ for _ , route := range routes {
8390 t .Run (route .Method + ":" + route .Path , func (t * testing.T ) {
8491 t .Parallel ()
8592
86- err = p .Register (route )
93+ err : = p .Register (route )
8794 require .NoError (t , err , "error registering route" )
8895
8996 resp , err := p .Call (route .Method , route .Path )
@@ -93,7 +100,13 @@ func TestRegisteredRoute(t *testing.T) {
93100 assert .Equal (t , resp .StatusCode , route .ResponseStatusCode )
94101 assert .Equal (t , resp .Header .Get ("Content-Type" ), route .ResponseContentType )
95102 body , _ := io .ReadAll (resp .Body )
96- assert .Equal (t , route .RawResponseBody , string (body ))
103+ if route .ResponseBody != nil {
104+ jsonBody , err := json .Marshal (route .ResponseBody )
105+ require .NoError (t , err )
106+ assert .JSONEq (t , string (jsonBody ), string (body ))
107+ } else {
108+ assert .Equal (t , route .RawResponseBody , string (body ))
109+ }
97110 resp .Body .Close ()
98111 })
99112 }
@@ -113,6 +126,39 @@ func TestUnregisteredRoute(t *testing.T) {
113126 assert .Equal (t , http .StatusNotFound , resp .StatusCode )
114127}
115128
129+ func TestUnregister (t * testing.T ) {
130+ t .Parallel ()
131+
132+ p , err := Wake (WithLogLevel (testLogLevel ))
133+ require .NoError (t , err , "error waking parrot" )
134+
135+ route := & Route {
136+ Method : http .MethodPost ,
137+ Path : "/hello" ,
138+ RawResponseBody : "Squawk" ,
139+ ResponseStatusCode : 200 ,
140+ ResponseContentType : "text/plain" ,
141+ }
142+
143+ err = p .Register (route )
144+ require .NoError (t , err , "error registering route" )
145+
146+ resp , err := p .Call (route .Method , route .Path )
147+ require .NoError (t , err , "error calling parrot" )
148+
149+ assert .Equal (t , resp .StatusCode , route .ResponseStatusCode )
150+ assert .Equal (t , resp .Header .Get ("Content-Type" ), route .ResponseContentType )
151+ body , _ := io .ReadAll (resp .Body )
152+ assert .Equal (t , route .RawResponseBody , string (body ))
153+ resp .Body .Close ()
154+
155+ p .Unregister (route .Method , route .Path )
156+
157+ resp , err = p .Call (route .Method , route .Path )
158+ require .NoError (t , err , "error calling parrot" )
159+ assert .Equal (t , http .StatusNotFound , resp .StatusCode )
160+ }
161+
116162func TestSaveLoad (t * testing.T ) {
117163 t .Parallel ()
118164
0 commit comments