Skip to content

Commit a48b809

Browse files
committed
feat: add tests for email template resolvers
1 parent cd46da6 commit a48b809

15 files changed

+263
-23
lines changed

Makefile

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,16 @@ build-dashboard:
1010
clean:
1111
rm -rf build
1212
test:
13-
rm -rf server/test/test.db && rm -rf test.db && cd server && go clean --testcache && go test -p 1 -v ./test
13+
rm -rf server/test/test.db && rm -rf test.db && cd server && go clean --testcache && TEST_DBS="sqlite" go test -p 1 -v ./test
14+
test-all-db:
15+
rm -rf server/test/test.db && rm -rf test.db
16+
docker run -d --name authorizer_scylla_db -p 9042:9042 scylladb/scylla
17+
docker run -d --name authorizer_mongodb_db -p 27017:27017 mongo:4.4.15
18+
docker run -d --name authorizer_arangodb -p 8529:8529 -e ARANGO_NO_AUTH=1 arangodb/arangodb:3.8.4
19+
cd server && go clean --testcache && TEST_DBS="sqlite,mongodb,arangodb,scylladb" go test -p 1 -v ./test
20+
docker rm -vf authorizer_mongodb_db
21+
docker rm -vf authorizer_scylla_db
22+
docker rm -vf authorizer_arangodb
1423
generate:
1524
cd server && go get github.com/99designs/gqlgen/[email protected] && go run github.com/99designs/gqlgen generate
1625

server/db/models/email_templates.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ type EmailTemplate struct {
1212
Key string `json:"_key,omitempty" bson:"_key,omitempty" cql:"_key,omitempty"` // for arangodb
1313
ID string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id" cql:"id"`
1414
EventName string `gorm:"unique" json:"event_name" bson:"event_name" cql:"event_name"`
15-
Template string `gorm:"type:text" json:"endpoint" bson:"endpoint" cql:"endpoint"`
15+
Template string `gorm:"type:text" json:"template" bson:"template" cql:"template"`
1616
CreatedAt int64 `json:"created_at" bson:"created_at" cql:"created_at"`
1717
UpdatedAt int64 `json:"updated_at" bson:"updated_at" cql:"updated_at"`
1818
}

server/db/providers/cassandradb/email_template.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ func (p *provider) UpdateEmailTemplate(ctx context.Context, emailTemplate models
8181
updateFields = strings.TrimSuffix(updateFields, ",")
8282

8383
query := fmt.Sprintf("UPDATE %s SET %s WHERE id = '%s'", KeySpace+"."+models.Collections.EmailTemplate, updateFields, emailTemplate.ID)
84+
fmt.Println("=> query:", query)
8485
err = p.db.Query(query).Exec()
8586
if err != nil {
8687
return nil, err

server/resolvers/add_webhook.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7+
"strings"
78

89
"github.com/authorizerdev/authorizer/server/db"
910
"github.com/authorizerdev/authorizer/server/db/models"
@@ -32,6 +33,11 @@ func AddWebhookResolver(ctx context.Context, params model.AddWebhookRequest) (*m
3233
return nil, fmt.Errorf("invalid event name %s", params.EventName)
3334
}
3435

36+
if strings.TrimSpace(params.Endpoint) == "" {
37+
log.Debug("empty endpoint not allowed")
38+
return nil, fmt.Errorf("empty endpoint not allowed")
39+
}
40+
3541
headerBytes, err := json.Marshal(params.Headers)
3642
if err != nil {
3743
return nil, err

server/resolvers/update_email_template.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package resolvers
33
import (
44
"context"
55
"fmt"
6+
"strings"
67

78
"github.com/authorizerdev/authorizer/server/db"
89
"github.com/authorizerdev/authorizer/server/db/models"
@@ -14,6 +15,8 @@ import (
1415
log "github.com/sirupsen/logrus"
1516
)
1617

18+
// TODO add template validator
19+
1720
// UpdateEmailTemplateResolver resolver for update email template mutation
1821
func UpdateEmailTemplateResolver(ctx context.Context, params model.UpdateEmailTemplateRequest) (*model.Response, error) {
1922
gc, err := utils.GinContextFromContext(ctx)
@@ -49,6 +52,10 @@ func UpdateEmailTemplateResolver(ctx context.Context, params model.UpdateEmailTe
4952
}
5053

5154
if params.Template != nil && emailTemplateDetails.Template != refs.StringValue(params.Template) {
55+
if strings.TrimSpace(refs.StringValue(params.Template)) == "" {
56+
log.Debug("empty template not allowed")
57+
return nil, fmt.Errorf("empty template not allowed")
58+
}
5259
emailTemplateDetails.Template = refs.StringValue(params.Template)
5360
}
5461

server/resolvers/update_webhook.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7+
"strings"
78

89
"github.com/authorizerdev/authorizer/server/db"
910
"github.com/authorizerdev/authorizer/server/db/models"
@@ -62,6 +63,10 @@ func UpdateWebhookResolver(ctx context.Context, params model.UpdateWebhookReques
6263
}
6364

6465
if params.Endpoint != nil && webhookDetails.EndPoint != refs.StringValue(params.Endpoint) {
66+
if strings.TrimSpace(refs.StringValue(params.Endpoint)) == "" {
67+
log.Debug("empty endpoint not allowed")
68+
return nil, fmt.Errorf("empty endpoint not allowed")
69+
}
6570
webhookDetails.EndPoint = refs.StringValue(params.Endpoint)
6671
}
6772

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package test
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/authorizerdev/authorizer/server/constants"
8+
"github.com/authorizerdev/authorizer/server/crypto"
9+
"github.com/authorizerdev/authorizer/server/db"
10+
"github.com/authorizerdev/authorizer/server/graph/model"
11+
"github.com/authorizerdev/authorizer/server/memorystore"
12+
"github.com/authorizerdev/authorizer/server/resolvers"
13+
"github.com/stretchr/testify/assert"
14+
)
15+
16+
func addEmailTemplateTest(t *testing.T, s TestSetup) {
17+
t.Helper()
18+
t.Run("should add email templates", func(t *testing.T) {
19+
req, ctx := createContext(s)
20+
adminSecret, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret)
21+
assert.NoError(t, err)
22+
h, err := crypto.EncryptPassword(adminSecret)
23+
assert.NoError(t, err)
24+
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", constants.AdminCookieName, h))
25+
26+
t.Run("should not add email template for invalid event type", func(t *testing.T) {
27+
emailTemplate, err := resolvers.AddEmailTemplateResolver(ctx, model.AddEmailTemplateRequest{
28+
EventName: "test",
29+
})
30+
assert.Error(t, err)
31+
assert.Nil(t, emailTemplate)
32+
})
33+
34+
t.Run("should not add email template for empty template", func(t *testing.T) {
35+
emailTemplate, err := resolvers.AddEmailTemplateResolver(ctx, model.AddEmailTemplateRequest{
36+
EventName: s.TestInfo.TestEmailTemplateEventTypes[0],
37+
Template: " ",
38+
})
39+
assert.Error(t, err)
40+
assert.Nil(t, emailTemplate)
41+
})
42+
for _, eventType := range s.TestInfo.TestEmailTemplateEventTypes {
43+
t.Run("should add email template for "+eventType, func(t *testing.T) {
44+
emailTemplate, err := resolvers.AddEmailTemplateResolver(ctx, model.AddEmailTemplateRequest{
45+
EventName: eventType,
46+
Template: `Test email`,
47+
})
48+
assert.NoError(t, err)
49+
assert.NotNil(t, emailTemplate)
50+
assert.NotEmpty(t, emailTemplate.Message)
51+
52+
et, err := db.Provider.GetEmailTemplateByEventName(ctx, eventType)
53+
assert.NoError(t, err)
54+
assert.Equal(t, et.EventName, eventType)
55+
})
56+
}
57+
})
58+
}

server/test/add_webhook_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func addWebhookTest(t *testing.T, s TestSetup) {
2222
assert.NoError(t, err)
2323
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", constants.AdminCookieName, h))
2424

25-
for _, eventType := range s.TestInfo.TestEventTypes {
25+
for _, eventType := range s.TestInfo.TestWebhookEventTypes {
2626
webhook, err := resolvers.AddWebhookResolver(ctx, model.AddWebhookRequest{
2727
EventName: eventType,
2828
Endpoint: s.TestInfo.WebhookEndpoint,
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package test
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/authorizerdev/authorizer/server/constants"
8+
"github.com/authorizerdev/authorizer/server/crypto"
9+
"github.com/authorizerdev/authorizer/server/db"
10+
"github.com/authorizerdev/authorizer/server/graph/model"
11+
"github.com/authorizerdev/authorizer/server/memorystore"
12+
"github.com/authorizerdev/authorizer/server/resolvers"
13+
"github.com/stretchr/testify/assert"
14+
)
15+
16+
func deleteEmailTemplateTest(t *testing.T, s TestSetup) {
17+
t.Helper()
18+
t.Run("should delete email templates", func(t *testing.T) {
19+
req, ctx := createContext(s)
20+
adminSecret, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret)
21+
assert.NoError(t, err)
22+
h, err := crypto.EncryptPassword(adminSecret)
23+
assert.NoError(t, err)
24+
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", constants.AdminCookieName, h))
25+
26+
// get all email templates
27+
emailTemplates, err := db.Provider.ListEmailTemplate(ctx, model.Pagination{
28+
Limit: 10,
29+
Page: 1,
30+
Offset: 0,
31+
})
32+
assert.NoError(t, err)
33+
34+
for _, e := range emailTemplates.EmailTemplates {
35+
res, err := resolvers.DeleteEmailTemplateResolver(ctx, model.DeleteEmailTemplateRequest{
36+
ID: e.ID,
37+
})
38+
39+
assert.NoError(t, err)
40+
assert.NotNil(t, res)
41+
assert.NotEmpty(t, res.Message)
42+
}
43+
44+
emailTemplates, err = db.Provider.ListEmailTemplate(ctx, model.Pagination{
45+
Limit: 10,
46+
Page: 1,
47+
Offset: 0,
48+
})
49+
assert.NoError(t, err)
50+
assert.Len(t, emailTemplates.EmailTemplates, 0)
51+
})
52+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package test
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/authorizerdev/authorizer/server/constants"
8+
"github.com/authorizerdev/authorizer/server/crypto"
9+
"github.com/authorizerdev/authorizer/server/memorystore"
10+
"github.com/authorizerdev/authorizer/server/resolvers"
11+
"github.com/stretchr/testify/assert"
12+
)
13+
14+
func emailTemplatesTest(t *testing.T, s TestSetup) {
15+
t.Helper()
16+
t.Run("should get email templates", func(t *testing.T) {
17+
req, ctx := createContext(s)
18+
adminSecret, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret)
19+
assert.NoError(t, err)
20+
h, err := crypto.EncryptPassword(adminSecret)
21+
assert.NoError(t, err)
22+
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", constants.AdminCookieName, h))
23+
24+
emailTemplates, err := resolvers.EmailTemplatesResolver(ctx, nil)
25+
assert.NoError(t, err)
26+
assert.NotEmpty(t, emailTemplates)
27+
assert.Len(t, emailTemplates.EmailTemplates, len(s.TestInfo.TestEmailTemplateEventTypes))
28+
})
29+
}

0 commit comments

Comments
 (0)