Skip to content

Commit

Permalink
feat: create test
Browse files Browse the repository at this point in the history
  • Loading branch information
SShlykov committed Mar 25, 2024
1 parent 400e00e commit 6701cea
Show file tree
Hide file tree
Showing 13 changed files with 903 additions and 175 deletions.
2 changes: 1 addition & 1 deletion auth/internal/domain/services/auth/sign_up.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ func (as *Service) SignUp(ctx context.Context, in *auth_v1.SignUpRequest) (*auth
status := &auth_v1.Status{Status: "ok", Message: ""}
resp := &auth_v1.SignUpResponse{Status: status}

_, err := as.userService.Create(ctx, adapters.ProtoToUser(in.User), in.Password)
_, err := as.userService.Create(ctx, adapters.AuthProtoToUser(in.User), in.Password)
if err != nil {
status.Status = "error"
status.Message = err.Error()
Expand Down
1 change: 1 addition & 0 deletions auth/internal/domain/services/token/create.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package token
1 change: 1 addition & 0 deletions auth/internal/domain/services/token/delete.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package token
1 change: 1 addition & 0 deletions auth/internal/domain/services/token/get_by_name.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package token
1 change: 1 addition & 0 deletions auth/internal/domain/services/token/update.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package token
4 changes: 2 additions & 2 deletions auth/internal/domain/services/user/0_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ func NewUserServiceServer(repository Repository) user_v1.UserServiceServer {
}

func (uss *Service) isUserExist(ctx context.Context, login string) bool {
_, err := uss.repo.FindByLogin(ctx, login)
return err == nil
user, _ := uss.repo.FindByLogin(ctx, login)
return user != nil
}

func (uss *Service) getPaginationMetadata(ctx context.Context, pagination *user_v1.Pagination) *user_v1.PaginationMetadata {
Expand Down
71 changes: 71 additions & 0 deletions auth/internal/domain/services/user/tests/create_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package tests

import (
"context"
"github.com/SShlykov/zeitment/auth/internal/domain/services/user"
"github.com/SShlykov/zeitment/auth/internal/models/dto"
"github.com/SShlykov/zeitment/auth/internal/test/mocks/repository/mocks"
"github.com/brianvoe/gofakeit/v7"
"github.com/stretchr/testify/assert"
"go.uber.org/mock/gomock"
"testing"
)

type CreateArgs struct {
ctx context.Context
user *dto.User
password string
}

type TestCreateStruct struct {
name string
args CreateArgs
mock repoMockFunc
expected *dto.User
err error
}

func TestCreate(t *testing.T) {
t.Parallel()

var (
ctx = context.Background()
ctrl = gomock.NewController(t)

userDto = &dto.User{ID: gofakeit.UUID(), Login: "login"}
validPassword = "Password123"
//entityUser = adapters.UserToEntity(userDto)

//errUserExist = errors.New("пользователь с таким логином уже существует")
//errLogin = errors.New("логин не соответствует требованиям")
//errPassword = errors.New("пароль не соответствует требованиям")
)
defer ctrl.Finish()

tests := []TestCreateStruct{
{
name: "success",
args: CreateArgs{ctx: ctx, user: userDto, password: validPassword},
mock: func(m *mocks.MockUsersRepo) user.Repository {
m.EXPECT().Create(ctx, gomock.Any()).Return(userDto.ID, nil)
m.EXPECT().FindByLogin(ctx, userDto.Login).Return(nil, nil)
return m
},
expected: userDto,
err: nil,
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
mock := mocks.NewMockUsersRepo(ctrl)
repo := tt.mock(mock)
svc := user.NewService(repo)

res, err := svc.Create(tt.args.ctx, tt.args.user, tt.args.password)
assert.Equal(t, tt.expected.ID, res.ID)
assert.Equal(t, tt.expected.Login, res.Login)
assert.Equal(t, tt.err, err)
})
}
}
20 changes: 12 additions & 8 deletions auth/internal/domain/services/user/tests/list_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package tests

import (
"github.com/SShlykov/zeitment/auth/internal/domain/services/user"
"github.com/SShlykov/zeitment/auth/internal/infrastructure/repository/entity"
"github.com/SShlykov/zeitment/auth/internal/models/adapters"
"github.com/SShlykov/zeitment/auth/internal/test/mocks/repository/mocks"
"github.com/SShlykov/zeitment/auth/pkg/grpc/user_v1"
Expand All @@ -12,16 +13,16 @@ import (
"testing"
)

type Args struct {
type ListArgs struct {
ctx context.Context
req *user_v1.ListUsersRequest
}

type repoMockFunc func(*mocks.MockUsersRepo) user.Repository

type TestStruct struct {
type TestListStruct struct {
name string
args Args
args ListArgs
mock repoMockFunc
expected *user_v1.ListUsersResponse
err error
Expand All @@ -42,17 +43,21 @@ func TestFindUsers(t *testing.T) {
}

resGrpc = []*user_v1.User{{Id: "1", Login: "login1"}, {Id: "2", Login: "login2"}, {Id: "3", Login: "login3"}}
resEnt = adapters.ProtoToUsers(resGrpc)
status = &user_v1.Status{Status: "ok", Message: ""}
resEnt = []*entity.User{
adapters.UserProtoToEntity(resGrpc[0]),
adapters.UserProtoToEntity(resGrpc[1]),
adapters.UserProtoToEntity(resGrpc[2]),
}
status = &user_v1.Status{Status: "ok", Message: ""}

metaTemplate = &user_v1.PaginationMetadata{Page: 1, PageSize: 10, Total: 3, TotalPages: 1}
)
defer ctrl.Finish()

tests := []TestStruct{
tests := []TestListStruct{
{
name: "success",
args: Args{ctx: ctx, req: &req},
args: ListArgs{ctx: ctx, req: &req},
mock: func(m *mocks.MockUsersRepo) user.Repository {
m.EXPECT().List(ctx, dbutils.NewPaginationWithLimitOffset(metaTemplate.Page, metaTemplate.PageSize)).Return(resEnt, nil)
m.EXPECT().Count(ctx).Return(uint64(len(resEnt)), nil)
Expand All @@ -64,7 +69,6 @@ func TestFindUsers(t *testing.T) {
}

for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
mockRepo := mocks.NewMockUsersRepo(ctrl)
Expand Down
36 changes: 34 additions & 2 deletions auth/internal/infrastructure/grpc/proto/auth_v1.proto
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ syntax = "proto3";

package auth_v1;

import "google/protobuf/timestamp.proto";
import "google/protobuf/wrappers.proto";
import "validate/validate.proto";
import "google/api/annotations.proto";
import "protoc-gen-openapiv2/options/annotations.proto";
import "user_v1.proto";

option go_package = "github.com/SShlykov/zeitment/auth/internal/infrastructure/grpc/proto/auth_v1;auth_v1";

Expand Down Expand Up @@ -71,7 +72,7 @@ service AuthService {
// Регистрация пользователя в системе
message SignUpRequest {
// Структура пользователя
user_v1.User user = 1;
User user = 1;
// Пароль пользователя | min_len: 6, max_len: 100
string Password = 2 [(validate.rules).string = { min_len: 6, max_len: 100 }];
}
Expand Down Expand Up @@ -139,4 +140,35 @@ message IsConfirmedRequest {
message IsConfirmedResponse {
Status Status = 1;
bool IsConfirmed = 2;
}

//------------------------------------------------------------------------------------------------------------------
// User
//------------------------------------------------------------------------------------------------------------------

message User {
// Идентификатор пользователя
string id = 1;
// Дата создания
google.protobuf.Timestamp created_at = 2;
// Дата обновления
google.protobuf.Timestamp updated_at = 3;
// Дата удаления | null - не удален
google.protobuf.Timestamp deleted_at = 4;
// Дата последнего входа | null - не входил
google.protobuf.Timestamp logged_at = 5;
// Дата подтверждения почты | null - не подтвержден
google.protobuf.Timestamp confirmed_at = 6;

// Логин пользователя | min_len: 6, max_len: 100
string login = 7 [(validate.rules).string = { min_len: 6, max_len: 100 }];
// Почта пользователя | null - не указана
google.protobuf.StringValue email = 8;

// Кем удален | null - не удален
google.protobuf.StringValue deleted_by = 9;
// Особая метка доступа для связи с другими сервисами
google.protobuf.Int32Value access_template_id = 10;
// Период через который нужно обновить пароль пользователя
google.protobuf.Int64Value update_after = 11;
}
40 changes: 40 additions & 0 deletions auth/internal/models/adapters/user_proto.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package adapters

import (
"github.com/SShlykov/zeitment/auth/internal/models/dto"
"github.com/SShlykov/zeitment/auth/pkg/grpc/auth_v1"
"github.com/SShlykov/zeitment/auth/pkg/grpc/user_v1"
"google.golang.org/protobuf/types/known/timestamppb"
)
Expand Down Expand Up @@ -60,3 +61,42 @@ func UserToProto(user *dto.User) *user_v1.User {

return protoUser
}

func AuthUserToProto(user *dto.User) *auth_v1.User {
protoUser := &auth_v1.User{
Id: user.ID,
CreatedAt: timestamppb.New(user.CreatedAt),
UpdatedAt: timestamppb.New(user.UpdatedAt),
DeletedAt: NullDtToProto(user.DeletedAt),
LoggedAt: NullDtToProto(user.LoggedAt),
ConfirmedAt: NullDtToProto(user.ConfirmedAt),
Login: user.Login,
Email: NullStringToProto(user.Email),

DeletedBy: NullStringToProto(user.DeletedBy),
AccessTemplateId: NullIntToProto(user.AccessTemplateID),
UpdateAfter: NullInt64ToProto(user.UpdateAfter),
}

return protoUser
}

func AuthProtoToUser(protoUser *auth_v1.User) *dto.User {
user := &dto.User{
ID: protoUser.Id,
CreatedAt: protoUser.CreatedAt.AsTime(),
UpdatedAt: protoUser.UpdatedAt.AsTime(),
DeletedAt: ProtoToNullDt(protoUser.DeletedAt),
LoggedAt: ProtoToNullDt(protoUser.LoggedAt),
ConfirmedAt: ProtoToNullDt(protoUser.ConfirmedAt),

Login: protoUser.Login,
Email: ProtoToNullString(protoUser.Email),

DeletedBy: ProtoToNullString(protoUser.DeletedBy),
AccessTemplateID: ProtoToNullInt(protoUser.AccessTemplateId),
UpdateAfter: ProtoToNullInt64(protoUser.UpdateAfter),
}

return user
}
Loading

0 comments on commit 6701cea

Please sign in to comment.