Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 0 additions & 39 deletions handlers/provider_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,45 +39,6 @@ func TestNew(t *testing.T) {
}
}

func TestRequest_Greetings(t *testing.T) {
//Register("test", &testProvider{})
type fields struct {
provider RequestProvider
}
type args struct {
projectId int
id int
}
tests := []struct {
name string
fields fields
args args
wantErr bool
}{
{
name: "ok",
fields: fields{
provider: &testProvider{title: "hi"},
},
args: args{},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
r := &Request{
provider: tt.fields.provider,
}
err := r.Greetings(tt.args.projectId, tt.args.id)
if tt.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
})
}
}

func TestRequest_ParseConfig(t *testing.T) {
type fields struct {
provider RequestProvider
Expand Down
138 changes: 138 additions & 0 deletions handlers/request_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,22 @@ type testProvider struct {
state string
title string
config string
// Fields for tracking comment behavior
commentCalled bool
lastComment string
leaveCommentErr error
}

func newTestProvider() RequestProvider {
return &testProvider{}
}

func (p *testProvider) LeaveComment(projectId, id int, message string) error {
p.commentCalled = true
p.lastComment = message
if p.leaveCommentErr != nil {
return p.leaveCommentErr
}
return p.err
}

Expand Down Expand Up @@ -116,3 +125,132 @@ func Test_Merge(t *testing.T) {
})
}
}

func TestRequest_Greetings(t *testing.T) {
type fields struct {
provider RequestProvider
}
type args struct {
projectId int
id int
}
tests := []struct {
name string
fields fields
args args
wantErr bool
wantCommentCalled bool
expectedComment string
}{
{
name: "greetings disabled - should not leave comment",
fields: fields{
provider: &testProvider{
title: "Test MR",
config: `greetings: {enabled: false}`,
state: "opened",
},
},
args: args{projectId: 1, id: 1},
wantErr: false,
wantCommentCalled: false,
},
{
name: "greetings enabled with default template - should leave comment",
fields: fields{
provider: &testProvider{
title: "Test MR",
config: `greetings: {enabled: true}`,
state: "opened",
},
},
args: args{projectId: 1, id: 1},
wantErr: false,
wantCommentCalled: true,
expectedComment: "Requirements:\n - Min approvals: 1\n - Title regex: .*\n\nOnce you've done, send **!merge** command and i will merge it!",
},
{
name: "greetings enabled with custom template - should leave comment",
fields: fields{
provider: &testProvider{
title: "Test MR",
config: `greetings:
enabled: true
template: "Hello! You need {{ .MinApprovals }} approvals."`,
state: "opened",
},
},
args: args{projectId: 1, id: 1},
wantErr: false,
wantCommentCalled: true,
expectedComment: "Hello! You need 1 approvals.",
},
{
name: "invalid template - should return error",
fields: fields{
provider: &testProvider{
title: "Test MR",
config: `greetings:
enabled: true
template: "Invalid template {{ .NonExistentField }"`,
state: "opened",
},
},
args: args{projectId: 1, id: 1},
wantErr: true,
wantCommentCalled: false,
},
{
name: "provider error on GetMRInfo - should return error",
fields: fields{
provider: &testProvider{
err: assert.AnError,
},
},
args: args{projectId: 1, id: 1},
wantErr: true,
wantCommentCalled: false,
},
{
name: "provider error on LeaveComment - should return error",
fields: fields{
provider: &testProvider{
title: "Test MR",
config: `greetings: {enabled: true}`,
state: "opened",
leaveCommentErr: assert.AnError,
},
},
args: args{projectId: 1, id: 1},
wantErr: true,
wantCommentCalled: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// Reset the provider's comment tracking
if tp, ok := tt.fields.provider.(*testProvider); ok {
tp.commentCalled = false
tp.lastComment = ""
}

r := &Request{
provider: tt.fields.provider,
}
err := r.Greetings(tt.args.projectId, tt.args.id)

if tt.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}

if tp, ok := tt.fields.provider.(*testProvider); ok {
assert.Equal(t, tt.wantCommentCalled, tp.commentCalled, "Expected comment called status mismatch")
if tt.wantCommentCalled && tt.expectedComment != "" {
assert.Equal(t, tt.expectedComment, tp.lastComment, "Expected comment content mismatch")
}
}
})
}
}
Loading