How to test handler which uses middleware

Issue

How to test handler which uses middleware

I’m trying to make unit test for handler which uses middleware but not as a dependency.

My code for handler looks like this:

package handlers

import (
    "github.com/gin-gonic/gin"
    "github.com/google/uuid"
)

type Handler interface{
    FindById(c *gin.Context)
}

type handler struct{}

func (*handler) FindById(context *gin.Context) {
    id := context.MustGet("id").(uuid.UUID)
    // do something with `id`...
}

And the code for middleware:

package middlewares

import (
    "net/http"

    "github.com/gin-gonic/gin"
    "github.com/google/uuid"
)

func Id(context *gin.Context) {
    id, err := uuid.Parse(context.Param("id"))

    if err != nil {
        context.AbortWithStatusJSON(http.StatusBadRequest, gin.H{
            "errors": []string{"id is not valid UUID"}
        })
        return
    }

    context.Set("id", id)
}

How can I mock:

id := context.MustGet("id").(uuid.UUID)

to test handler struct?

Solution

Set the key on the context: c.Set("id", uuid)

Answered By – Zombo

Answer Checked By – Willingham (GoLangFix Volunteer)

Leave a Reply

Your email address will not be published.