Skip to content

Commit bd1101e

Browse files
committed
add unit tests
1 parent 3eb230d commit bd1101e

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

api/single_entity_write_test.go

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -736,3 +736,76 @@ func TestDeleteLabel(t *testing.T) {
736736
Caller: auth.Caller{Name: "test", MetricGroups: []string{"test"}},
737737
}}, server.auth.AuthorizeArgs)
738738
}
739+
740+
func TestDeleteLabelEntityNotFound(t *testing.T) {
741+
// Test that DELETE /.../labels/:label is idempotent and returns HTTP 200 OK
742+
// when the entity does not exist.
743+
store := mock.EntityStore{
744+
DeleteLabelFunc: func(ctx context.Context, wo entity.WriteOp, label string) (etre.Entity, error) {
745+
// Simulate entity not found. DeleteLabel returns (nil, etre.ErrEntityNotFound).
746+
// The handler then sets err = nil because DELETE is idempotent.
747+
return nil, etre.ErrEntityNotFound
748+
},
749+
}
750+
server := setup(t, defaultConfig, store)
751+
defer server.ts.Close()
752+
753+
etreurl := server.url + etre.API_ROOT + "/entity/" + entityType + "/" + testEntityIds[0] +
754+
"/labels/foo"
755+
756+
var gotWR etre.WriteResult
757+
statusCode, err := test.MakeHTTPRequest("DELETE", etreurl, nil, &gotWR)
758+
require.NoError(t, err)
759+
760+
assert.Equal(t, http.StatusOK, statusCode)
761+
expectWrite := []etre.Write{{
762+
EntityId: "",
763+
URI: addr + etre.API_ROOT + "/entity/",
764+
Diff: nil,
765+
},
766+
}
767+
assert.Equal(t, expectWrite, gotWR.Writes)
768+
assert.Nil(t, gotWR.Error)
769+
}
770+
771+
func TestDeleteLabelError(t *testing.T) {
772+
// Test that DELETE /.../labels/:label works correctly when the diff returned
773+
// from the store returns an error. This can happen. The API
774+
// should handle it gracefully by returning an empty EntityId in the
775+
// write result.
776+
store := mock.EntityStore{
777+
DeleteLabelFunc: func(ctx context.Context, wo entity.WriteOp, label string) (etre.Entity, error) {
778+
// Simulate a diff without an _id.
779+
return nil, fmt.Errorf("some error")
780+
},
781+
}
782+
server := setup(t, defaultConfig, store)
783+
defer server.ts.Close()
784+
785+
etreurl := server.url + etre.API_ROOT + "/entity/" + entityType + "/" + testEntityIds[0] +
786+
"/labels/foo"
787+
788+
var gotWR etre.WriteResult
789+
statusCode, err := test.MakeHTTPRequest("DELETE", etreurl, nil, &gotWR)
790+
require.NoError(t, err)
791+
792+
assert.Equal(t, http.StatusInternalServerError, statusCode)
793+
require.NotNil(t, gotWR.Writes)
794+
require.Len(t, gotWR.Writes, 1)
795+
796+
// Because the diff had no _id, the EntityId is empty string.
797+
// The diff from the mock is returned.
798+
expectWrite := etre.Write{
799+
EntityId: "",
800+
URI: addr + etre.API_ROOT + "/entity/",
801+
Diff: nil,
802+
}
803+
expectedError := &etre.Error{
804+
Type: "unhandled-error",
805+
Message: "some error",
806+
EntityId: "",
807+
HTTPStatus: http.StatusInternalServerError,
808+
}
809+
assert.Equal(t, expectWrite, gotWR.Writes[0])
810+
assert.Equal(t, expectedError, gotWR.Error)
811+
}

0 commit comments

Comments
 (0)