v0.33.1 9577fee

manage_session_test.go RawHistoryFolder

1package usecase_test
2
3import (
4	"context"
5	"errors"
6	"testing"
7	"time"
8
9	"github.com/bnema/dumber/internal/application/port"
10	portmocks "github.com/bnema/dumber/internal/application/port/mocks"
11	"github.com/bnema/dumber/internal/application/usecase"
12	"github.com/bnema/dumber/internal/domain/entity"
13	repomocks "github.com/bnema/dumber/internal/domain/repository/mocks"
14	"github.com/bnema/dumber/internal/logging"
15	"github.com/rs/zerolog"
16	"github.com/stretchr/testify/assert"
17	"github.com/stretchr/testify/mock"
18	"github.com/stretchr/testify/require"
19)
20
21func testContext() context.Context {
22	logger := logging.NewFromConfigValues("debug", "console")
23	return logging.WithContext(context.Background(), logger)
24}
25
26func TestManageSessionUseCase_StartSession_SavesAndReturnsLogger(t *testing.T) {
27	ctx := testContext()
28
29	sessionRepo := repomocks.NewMockSessionRepository(t)
30	loggerPort := portmocks.NewMockSessionLogger(t)
31
32	cfg := port.SessionLogConfig{Level: "info", Format: "json", TimeFormat: "15:04:05", EnableFileLog: false}
33	returnedLogger := zerolog.New(zerolog.NewConsoleWriter())
34
35	loggerPort.EXPECT().CreateLogger(mock.Anything, mock.Anything, cfg).
36		Return(returnedLogger, func() {}, nil)
37
38	sessionRepo.EXPECT().Save(mock.Anything, mock.AnythingOfType("*entity.Session")).
39		Run(func(_ context.Context, s *entity.Session) {
40			require.Equal(t, entity.SessionTypeBrowser, s.Type)
41			require.NotEmpty(t, s.ID)
42			require.False(t, s.StartedAt.IsZero())
43		}).
44		Return(nil)
45
46	uc := usecase.NewManageSessionUseCase(sessionRepo, loggerPort)
47
48	out, err := uc.StartSession(ctx, usecase.StartSessionInput{Type: entity.SessionTypeBrowser, Now: time.Now(), LogConfig: cfg})
49	require.NoError(t, err)
50	require.NotNil(t, out)
51	assert.NotNil(t, out.Session)
52	assert.Equal(t, returnedLogger, out.Logger)
53}
54
55func TestManageSessionUseCase_StartSession_WhenSaveFails_CleansUp(t *testing.T) {
56	ctx := testContext()
57
58	sessionRepo := repomocks.NewMockSessionRepository(t)
59	loggerPort := portmocks.NewMockSessionLogger(t)
60
61	cfg := port.SessionLogConfig{Level: "info", Format: "json", EnableFileLog: false}
62	returnedLogger := zerolog.New(zerolog.NewConsoleWriter())
63
64	cleanupCalled := false
65	cleanupFn := func() { cleanupCalled = true }
66
67	loggerPort.EXPECT().CreateLogger(mock.Anything, mock.Anything, cfg).
68		Return(returnedLogger, cleanupFn, nil)
69
70	sessionRepo.EXPECT().Save(mock.Anything, mock.AnythingOfType("*entity.Session")).
71		Return(errors.New("db down"))
72
73	uc := usecase.NewManageSessionUseCase(sessionRepo, loggerPort)
74
75	_, err := uc.StartSession(ctx, usecase.StartSessionInput{Type: entity.SessionTypeBrowser, Now: time.Now(), LogConfig: cfg})
76	require.Error(t, err)
77	assert.True(t, cleanupCalled)
78}

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 8

Tags 42

↑↓ moveenter openesc close