Skip to content

Commit

Permalink
refactor: refactor notes tests with mockery mocks
Browse files Browse the repository at this point in the history
  • Loading branch information
wischoepke committed Jan 16, 2025
1 parent 354bef8 commit 899e6b9
Show file tree
Hide file tree
Showing 3 changed files with 425 additions and 153 deletions.
2 changes: 2 additions & 0 deletions server/src/.mockery.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,5 @@ packages:
all: true
BoardSessions:
all: true
Notes:
all: true
194 changes: 41 additions & 153 deletions server/src/api/notes_test.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package api

import (
"context"
"errors"
"fmt"
"github.com/go-chi/chi/v5"
Expand All @@ -12,123 +11,13 @@ import (
"net/http/httptest"
"scrumlr.io/server/common"
"scrumlr.io/server/common/dto"
"scrumlr.io/server/common/filter"
"scrumlr.io/server/identifiers"
"scrumlr.io/server/logger"
"scrumlr.io/server/services"
"scrumlr.io/server/mocks/services"
"strings"
"testing"
)

type NotesMock struct {
services.Notes
mock.Mock
}

func (m *NotesMock) Create(ctx context.Context, req dto.NoteCreateRequest) (*dto.Note, error) {
args := m.Called(req)
return args.Get(0).(*dto.Note), args.Error(1)
}
func (m *NotesMock) Get(ctx context.Context, id uuid.UUID) (*dto.Note, error) {
args := m.Called(id)
return args.Get(0).(*dto.Note), args.Error(1)
}
func (m *NotesMock) Delete(ctx context.Context, req dto.NoteDeleteRequest, id uuid.UUID) error {
args := m.Called(id)
return args.Error(0)

}

type BoardsMock struct {
services.Boards
mock.Mock
}

type SessionsMock struct {
mock.Mock
}

func (m *SessionsMock) SessionExists(ctx context.Context, boardID, userID uuid.UUID) (bool, error) {
args := m.Called(boardID, userID)
return args.Bool(0), args.Error(1)
}

func (m *SessionsMock) ParticipantBanned(ctx context.Context, boardID, userID uuid.UUID) (bool, error) {
args := m.Called(boardID, userID)
return args.Bool(0), args.Error(1)
}

func (m *SessionsMock) Connect(ctx context.Context, boardID, userID uuid.UUID) error {
args := m.Called(boardID, userID)
return args.Error(0)
}

func (m *SessionsMock) Create(ctx context.Context, boardID, userID uuid.UUID) (*dto.BoardSession, error) {
args := m.Called(boardID, userID)
return args.Get(0).(*dto.BoardSession), args.Error(1)
}

// Add other missing methods here
func (m *SessionsMock) Get(ctx context.Context, boardID, userID uuid.UUID) (*dto.BoardSession, error) {
args := m.Called(boardID, userID)
return args.Get(0).(*dto.BoardSession), args.Error(1)
}

func (m *SessionsMock) Update(ctx context.Context, body dto.BoardSessionUpdateRequest) (*dto.BoardSession, error) {
args := m.Called(body)
return args.Get(0).(*dto.BoardSession), args.Error(1)
}

func (m *SessionsMock) UpdateAll(ctx context.Context, body dto.BoardSessionsUpdateRequest) ([]*dto.BoardSession, error) {
args := m.Called(body)
return args.Get(0).([]*dto.BoardSession), args.Error(1)
}

func (m *SessionsMock) List(ctx context.Context, boardID uuid.UUID, f filter.BoardSessionFilter) ([]*dto.BoardSession, error) {
args := m.Called(boardID, f)
return args.Get(0).([]*dto.BoardSession), args.Error(1)
}

func (m *SessionsMock) Disconnect(ctx context.Context, boardID, userID uuid.UUID) error {
args := m.Called(boardID, userID)
return args.Error(0)
}

func (m *SessionsMock) GetSessionRequest(ctx context.Context, boardID, userID uuid.UUID) (*dto.BoardSessionRequest, error) {
args := m.Called(boardID, userID)
return args.Get(0).(*dto.BoardSessionRequest), args.Error(1)
}

func (m *SessionsMock) CreateSessionRequest(ctx context.Context, boardID, userID uuid.UUID) (*dto.BoardSessionRequest, error) {
args := m.Called(boardID, userID)
return args.Get(0).(*dto.BoardSessionRequest), args.Error(1)
}

func (m *SessionsMock) ListSessionRequest(ctx context.Context, boardID uuid.UUID, statusQuery string) ([]*dto.BoardSessionRequest, error) {
args := m.Called(boardID, statusQuery)
return args.Get(0).([]*dto.BoardSessionRequest), args.Error(1)
}

func (m *SessionsMock) UpdateSessionRequest(ctx context.Context, body dto.BoardSessionRequestUpdate) (*dto.BoardSessionRequest, error) {
args := m.Called(body)
return args.Get(0).(*dto.BoardSessionRequest), args.Error(1)
}

func (m *SessionsMock) ModeratorSessionExists(ctx context.Context, boardID, userID uuid.UUID) (bool, error) {
args := m.Called(boardID, userID)
return args.Bool(0), args.Error(1)
}

func (m *SessionsMock) SessionRequestExists(ctx context.Context, boardID, userID uuid.UUID) (bool, error) {
args := m.Called(boardID, userID)
return args.Bool(0), args.Error(1)
}

func (m *BoardsMock) Get(ctx context.Context, id uuid.UUID) (*dto.Board, error) {
args := m.Called(id)
return args.Get(0).(*dto.Board), args.Error(1)
}

type NotesTestSuite struct {
suite.Suite
}
Expand Down Expand Up @@ -167,38 +56,37 @@ func (suite *NotesTestSuite) TestCreateNote() {
for _, tt := range tests {
suite.Run(tt.name, func() {
s := new(Server)
mock := new(NotesMock)
noteMock := services.NewMockNotes(suite.T())
testText := "asdf"

boardId, _ := uuid.NewRandom()
userId, _ := uuid.NewRandom()
colId, _ := uuid.NewRandom()

mock.On("Create", dto.NoteCreateRequest{
Board: boardId,
User: userId,
Text: testText,
Column: colId,
}).Return(&dto.Note{
Text: testText,
}, tt.err)

s.notes = mock
s.notes = noteMock

req := NewTestRequestBuilder("POST", "/", strings.NewReader(fmt.Sprintf(`{
"column": "%s",
"text" : "%s"
}`, colId.String(), testText)))

req.req = logger.InitTestLoggerRequest(req.Request())

req.AddToContext(identifiers.BoardIdentifier, boardId).
AddToContext(identifiers.UserIdentifier, userId)

noteMock.EXPECT().Create(req.req.Context(), dto.NoteCreateRequest{
Board: boardId,
User: userId,
Text: testText,
Column: colId,
}).Return(&dto.Note{
Text: testText,
}, tt.err)

rr := httptest.NewRecorder()

s.createNote(rr, req.Request())
suite.Equal(tt.expectedCode, rr.Result().StatusCode)
mock.AssertExpectations(suite.T())
noteMock.AssertExpectations(suite.T())
})
}

Expand Down Expand Up @@ -233,23 +121,23 @@ func (suite *NotesTestSuite) TestGetNote() {
for _, tt := range tests {
suite.Run(tt.name, func() {
s := new(Server)
mock := new(NotesMock)
s.notes = mock
noteMock := services.NewMockNotes(suite.T())
s.notes = noteMock

noteID, _ := uuid.NewRandom()

mock.On("Get", noteID).Return(&dto.Note{
ID: noteID,
}, tt.err)

req := NewTestRequestBuilder("GET", "/", nil).
AddToContext(identifiers.NoteIdentifier, noteID)

noteMock.EXPECT().Get(req.req.Context(), noteID).Return(&dto.Note{
ID: noteID,
}, tt.err)

rr := httptest.NewRecorder()

s.getNote(rr, req.Request())
suite.Equal(tt.expectedCode, rr.Result().StatusCode)
mock.AssertExpectations(suite.T())
noteMock.AssertExpectations(suite.T())
})
}
}
Expand Down Expand Up @@ -280,49 +168,49 @@ func (suite *NotesTestSuite) TestDeleteNote() {
for _, tt := range tests {
suite.Run(tt.name, func() {
s := new(Server)
noteMock := new(NotesMock)

noteMock := services.NewMockNotes(suite.T())
boardMock := services.NewMockBoards(suite.T())
sessionMock := services.NewMockBoardSessions(suite.T())

s.notes = noteMock
boardMock := new(BoardsMock)
s.boards = boardMock
sessionMock := new(SessionsMock)
s.sessions = sessionMock

boardID, _ := uuid.NewRandom()
userID, _ := uuid.NewRandom()
noteID, _ := uuid.NewRandom()

r := chi.NewRouter()
s.initNoteResources(r)
boardMock.On("Get", boardID).Return(&dto.Board{

req := NewTestRequestBuilder("DELETE", fmt.Sprintf("/notes/%s", noteID.String()), strings.NewReader(`{"deleteStack": false}`))
req.req = logger.InitTestLoggerRequest(req.Request())
rctx := chi.NewRouteContext()
rctx.URLParams.Add("id", boardID.String())
req.AddToContext(chi.RouteCtxKey, rctx)
req.AddToContext(identifiers.UserIdentifier, userID)

boardMock.EXPECT().Get(mock.Anything, boardID).Return(&dto.Board{
ID: boardID,
IsLocked: tt.isLocked,
}, nil)

// Mock the SessionExists method
sessionMock.On("SessionExists", boardID, userID).Return(true, nil)
sessionMock.EXPECT().SessionExists(req.req.Context(), boardID, userID).Return(true, nil)

// Mock the ModeratorSessionExists method
sessionMock.On("ModeratorSessionExists", boardID, userID).Return(true, nil)
sessionMock.EXPECT().ModeratorSessionExists(mock.Anything, boardID, userID).Return(true, nil)

// Mock the ParticipantBanned method
sessionMock.On("ParticipantBanned", boardID, userID).Return(false, nil)
sessionMock.EXPECT().ParticipantBanned(req.req.Context(), boardID, userID).Return(false, nil)

if tt.isLocked {
noteMock.On("Delete", mock.Anything, mock.Anything).Return(nil)
noteMock.EXPECT().Delete(mock.Anything, dto.NoteDeleteRequest{DeleteStack: false}, noteID).Return(nil)
} else {
boardMock.On("Get", boardID).Return(&dto.Board{
ID: boardID,
IsLocked: tt.isLocked,
}, tt.err)
noteMock.On("Delete", mock.Anything).Return(tt.err)
noteMock.EXPECT().Delete(mock.Anything, dto.NoteDeleteRequest{DeleteStack: false}, noteID).Return(tt.err)
}

req := NewTestRequestBuilder("DELETE", fmt.Sprintf("/notes/%s", noteID.String()), strings.NewReader(`{"deleteStack": false}`))
req.req = logger.InitTestLoggerRequest(req.Request())
rctx := chi.NewRouteContext()
rctx.URLParams.Add("id", boardID.String())
req.AddToContext(chi.RouteCtxKey, rctx)
req.AddToContext(identifiers.UserIdentifier, userID)

rr := httptest.NewRecorder()
r.ServeHTTP(rr, req.Request())

Expand Down
Loading

0 comments on commit 899e6b9

Please sign in to comment.