Skip to content

Commit d4f3520

Browse files
committed
feat: add new test for RetriveById
...to ensure 403 is returned when TeamProjectValidationForCohort returns false
1 parent 45b3110 commit d4f3520

File tree

2 files changed

+25
-12
lines changed

2 files changed

+25
-12
lines changed

tests/controllers_tests/controllers_test.go

+21-10
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ var cohortDefinitionControllerNeedsDb = controllers.NewCohortDefinitionControlle
5858

5959
// instance of the controller that talks to a mock implementation of the model:
6060
var cohortDefinitionController = controllers.NewCohortDefinitionController(*new(dummyCohortDefinitionDataModel), *new(dummyTeamProjectAuthz))
61+
var cohortDefinitionControllerWithFailingTeamProjectAuthz = controllers.NewCohortDefinitionController(*new(dummyCohortDefinitionDataModel), *new(dummyFailingTeamProjectAuthz))
6162

6263
type dummyCohortDataModel struct{}
6364

@@ -482,7 +483,6 @@ func TestRetriveStatsBySourceIdAndTeamProject(t *testing.T) {
482483
requestContext.Writer = new(tests.CustomResponseWriter)
483484
cohortDefinitionController.RetriveStatsBySourceIdAndTeamProject(requestContext)
484485
result := requestContext.Writer.(*tests.CustomResponseWriter)
485-
log.Printf("result: %s", result)
486486
// expect result with all of the dummy data:
487487
if !strings.Contains(result.CustomResponseWriterOut, "name1_"+teamProject) ||
488488
!strings.Contains(result.CustomResponseWriterOut, "name2_"+teamProject) ||
@@ -510,7 +510,6 @@ func TestRetriveById(t *testing.T) {
510510
requestContext.Writer = new(tests.CustomResponseWriter)
511511
cohortDefinitionController.RetriveById(requestContext)
512512
result := requestContext.Writer.(*tests.CustomResponseWriter)
513-
log.Printf("result: %s", result)
514513
// expect result with dummy data:
515514
if !strings.Contains(result.CustomResponseWriterOut, "test 1") {
516515
t.Errorf("Expected data in result")
@@ -530,6 +529,26 @@ func TestRetriveByIdModelError(t *testing.T) {
530529
}
531530
}
532531

532+
func TestRetriveByIdAuthorizationError(t *testing.T) {
533+
setUp(t)
534+
requestContext := new(gin.Context)
535+
requestContext.Params = append(requestContext.Params, gin.Param{Key: "id", Value: "1"})
536+
requestContext.Writer = new(tests.CustomResponseWriter)
537+
cohortDefinitionControllerWithFailingTeamProjectAuthz.RetriveById(requestContext)
538+
result := requestContext.Writer.(*tests.CustomResponseWriter)
539+
if !requestContext.IsAborted() {
540+
t.Errorf("Expected aborted request")
541+
}
542+
if result.Status() != http.StatusForbidden {
543+
t.Errorf("Expected StatusForbidden, got %d", result.Status())
544+
}
545+
// expect result with dummy data:
546+
if !strings.Contains(result.CustomResponseWriterOut, "access denied") {
547+
t.Errorf("Expected 'access denied' in response")
548+
}
549+
550+
}
551+
533552
func TestRetrieveBreakdownStatsBySourceIdAndCohortId(t *testing.T) {
534553
setUp(t)
535554
requestContext := new(gin.Context)
@@ -540,7 +559,6 @@ func TestRetrieveBreakdownStatsBySourceIdAndCohortId(t *testing.T) {
540559
requestContext.Writer = new(tests.CustomResponseWriter)
541560
conceptController.RetrieveBreakdownStatsBySourceIdAndCohortId(requestContext)
542561
result := requestContext.Writer.(*tests.CustomResponseWriter)
543-
log.Printf("result: %s", result)
544562
// expect result with dummy data:
545563
if !strings.Contains(result.CustomResponseWriterOut, "persons_in_cohort_with_value") {
546564
t.Errorf("Expected data in result")
@@ -571,7 +589,6 @@ func TestRetrieveBreakdownStatsBySourceIdAndCohortIdAndVariables(t *testing.T) {
571589
requestContext.Writer = new(tests.CustomResponseWriter)
572590
conceptController.RetrieveBreakdownStatsBySourceIdAndCohortIdAndVariables(requestContext)
573591
result := requestContext.Writer.(*tests.CustomResponseWriter)
574-
log.Printf("result: %s", result)
575592
// expect result with dummy data:
576593
if !strings.Contains(result.CustomResponseWriterOut, "persons_in_cohort_with_value") {
577594
t.Errorf("Expected data in result")
@@ -616,7 +633,6 @@ func TestRetrieveInfoBySourceIdAndConceptIds(t *testing.T) {
616633
requestContext.Writer = new(tests.CustomResponseWriter)
617634
conceptController.RetrieveInfoBySourceIdAndConceptIds(requestContext)
618635
result := requestContext.Writer.(*tests.CustomResponseWriter)
619-
log.Printf("result: %s", result)
620636
// expect result with dummy data:
621637
if !strings.Contains(result.CustomResponseWriterOut, "Concept A") ||
622638
!strings.Contains(result.CustomResponseWriterOut, "Concept B") {
@@ -633,7 +649,6 @@ func TestRetrieveInfoBySourceIdAndConceptTypes(t *testing.T) {
633649
requestContext.Writer = new(tests.CustomResponseWriter)
634650
conceptController.RetrieveInfoBySourceIdAndConceptTypes(requestContext)
635651
result := requestContext.Writer.(*tests.CustomResponseWriter)
636-
log.Printf("result: %s", result)
637652
// expect result with dummy data:
638653
if !strings.Contains(result.CustomResponseWriterOut, "Concept A") ||
639654
!strings.Contains(result.CustomResponseWriterOut, "Concept B") {
@@ -652,7 +667,6 @@ func TestRetrieveInfoBySourceIdAndConceptTypesModelError(t *testing.T) {
652667
dummyModelReturnError = true
653668
conceptController.RetrieveInfoBySourceIdAndConceptTypes(requestContext)
654669
result := requestContext.Writer.(*tests.CustomResponseWriter)
655-
log.Printf("result: %s", result)
656670
if !requestContext.IsAborted() {
657671
t.Errorf("Expected aborted request")
658672
}
@@ -670,7 +684,6 @@ func TestRetrieveInfoBySourceIdAndConceptTypesArgsError(t *testing.T) {
670684
dummyModelReturnError = true
671685
conceptController.RetrieveInfoBySourceIdAndConceptTypes(requestContext)
672686
result := requestContext.Writer.(*tests.CustomResponseWriter)
673-
log.Printf("result: %s", result)
674687
if !requestContext.IsAborted() {
675688
t.Errorf("Expected aborted request")
676689
}
@@ -688,7 +701,6 @@ func TestRetrieveInfoBySourceIdAndConceptTypesMissingBody(t *testing.T) {
688701
dummyModelReturnError = true
689702
conceptController.RetrieveInfoBySourceIdAndConceptTypes(requestContext)
690703
result := requestContext.Writer.(*tests.CustomResponseWriter)
691-
log.Printf("result: %s", result)
692704
if !requestContext.IsAborted() {
693705
t.Errorf("Expected aborted request")
694706
}
@@ -990,7 +1002,6 @@ func TestRetrieveAttritionTable(t *testing.T) {
9901002
requestContext.Writer = new(tests.CustomResponseWriter)
9911003
conceptController.RetrieveAttritionTable(requestContext)
9921004
result := requestContext.Writer.(*tests.CustomResponseWriter)
993-
log.Printf("result: %s", result.CustomResponseWriterOut)
9941005
// check result vs expect result:
9951006
csvLines := strings.Split(strings.TrimRight(result.CustomResponseWriterOut, "\n"), "\n")
9961007
expectedLines := []string{

tests/testutils.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ func Map[T, U any](items []T, f func(T) U) []U {
219219
// to use when mocking request context (gin.Context) in controller tests:
220220
type CustomResponseWriter struct {
221221
CustomResponseWriterOut string
222+
StatusCode int
222223
}
223224

224225
func (w *CustomResponseWriter) Header() http.Header {
@@ -234,7 +235,8 @@ func (w *CustomResponseWriter) Write(b []byte) (int, error) {
234235
}
235236

236237
func (w *CustomResponseWriter) WriteHeader(statusCode int) {
237-
// do nothing
238+
// Store the status code
239+
w.StatusCode = statusCode
238240
}
239241

240242
func (w *CustomResponseWriter) CloseNotify() <-chan bool {
@@ -254,7 +256,7 @@ func (w *CustomResponseWriter) Pusher() (pusher http.Pusher) {
254256
}
255257

256258
func (w *CustomResponseWriter) Status() int {
257-
return 0
259+
return w.StatusCode
258260
}
259261

260262
func (w *CustomResponseWriter) Size() int {

0 commit comments

Comments
 (0)