Skip to content

Commit

Permalink
Increase coverage (#137)
Browse files Browse the repository at this point in the history
Co-authored-by: Taha Dostifam <[email protected]>
  • Loading branch information
AssassinRobot and tahadostifam authored Aug 23, 2024
1 parent f80a143 commit e23e813
Show file tree
Hide file tree
Showing 12 changed files with 1,275 additions and 165 deletions.
2 changes: 1 addition & 1 deletion config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ func Read() *Config {
CurrentEnv = Production
filename = "config.production.yml"
} else if env == "test" {
CurrentEnv = Production
CurrentEnv = Test
filename = "config.test.yml"
} else {
panic(errors.New("Invalid env value set for variable KAVKA_ENV: " + env))
Expand Down
39 changes: 39 additions & 0 deletions config/config.test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
app_name: "kavka"

http:
host: "0.0.0.0"
port: 3000
cors:
allow_origins: "*"

mongo:
host: "127.0.0.1"
username: "test"
password: "test"
port: 27017
db_name: "kavka"

redis:
host: "127.0.0.1"
username: "redis"
password:
port: 6379
db: 0

minio:
endpoint: 127.0.0.1:9000
access_key: uD3h2W3CONpYe8Tb4nbp
secret_key: fKF98iAk1eDSpdtdJWcJHgivjpF4Su4HCdgkpYvQ

sms:

logger:
file_name: kavka.logs
level: debug
targets: [console, file]
max_size: 10
max_backups: 1
compress: false

nats:
url: 127.0.0.1:4222
20 changes: 20 additions & 0 deletions config/config_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package config

import (
"errors"
"os"
"testing"

Expand All @@ -19,3 +20,22 @@ func TestDevelopmentConfig(t *testing.T) {
require.NotEmpty(t, configs)
require.Equal(t, CurrentEnv, Development)
}

func TestTestConfig(t *testing.T) {
os.Setenv("KAVKA_ENV", "test")

Read()
require.Equal(t, CurrentEnv, Test)
}

func TestFunctionPanics(t *testing.T) {
os.Setenv("KAVKA_ENV", "panic")

defer func() {
if r := recover(); r == nil {
require.Error(t, errors.New("Expected panic but did not panic"))
}
}()

Read()
}
52 changes: 51 additions & 1 deletion database/repo_mongo/message_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

"github.com/kavkaco/Kavka-Core/internal/model"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
)

Expand All @@ -19,10 +20,59 @@ type messagesDoc struct {

type messageRepository struct {
messagesCollection *mongo.Collection
usersCollection *mongo.Collection
}

func NewMessageMongoRepository(db *mongo.Database) repository.MessageRepository {
return &messageRepository{db.Collection(database.MessagesCollection)}
return &messageRepository{db.Collection(database.MessagesCollection), db.Collection(database.UsersCollection)}
}

func (repo *messageRepository) FetchMessage(ctx context.Context, chatID primitive.ObjectID, messageID primitive.ObjectID) (*model.Message, error) {
cursor, err := repo.messagesCollection.Aggregate(ctx, bson.A{
bson.M{
"$match": bson.M{
"chat_id": chatID,
},
},
bson.M{
"$project": bson.M{
"_id": 1,
"chat_id": 1,
"message": bson.M{
"$arrayElemAt": bson.A{
bson.M{
"$filter": bson.M{
"input": "$messages",
"as": "message",
"cond": bson.M{"$eq": bson.A{
"$$message.message_id", messageID,
}},
},
},
0,
},
},
},
},
})
if err != nil {
return nil, err
}

type docModel struct {
ChatID model.ChatID `bson:"chat_id"`
Message model.Message `bson:"message"`
}

var docs []docModel
err = cursor.All(ctx, &docs)
if err != nil || len(docs) == 0 {
return nil, err
}

message := &docs[0].Message

return message, nil
}

func (repo *messageRepository) FetchLastMessage(ctx context.Context, chatID model.ChatID) (*model.Message, error) {
Expand Down
1 change: 1 addition & 0 deletions internal/repository/message_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ type MessageRepository interface {
Create(ctx context.Context, chatID model.ChatID) error
Insert(ctx context.Context, chatID model.ChatID, message *model.Message) (*model.Message, error)
FetchLastMessage(ctx context.Context, chatID model.ChatID) (*model.Message, error)
FetchMessage(ctx context.Context, chatID model.ChatID, messageID model.MessageID) (*model.Message, error)
FetchMessages(ctx context.Context, chatID model.ChatID) ([]*model.MessageGetter, error)
UpdateMessageContent(ctx context.Context, chatID model.ChatID, messageID model.MessageID, newMessageContent string) error
Delete(ctx context.Context, chatID model.ChatID, messageID model.MessageID) error
Expand Down
42 changes: 20 additions & 22 deletions internal/service/message/message_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,33 +117,31 @@ func (s *service) SendTextMessage(ctx context.Context, chatID model.ChatID, user
}

func (s *service) DeleteMessage(ctx context.Context, chatID model.ChatID, userID model.UserID, messageID model.MessageID) *vali.Varror {
panic("unimplemented")

// varrors := s.validator.Validate(DeleteMessageValidation{chatID, userID, messageID})
// if len(varrors) > 0 {
// return &vali.Varror{ValidationErrors: varrors}
// }
varrors := s.validator.Validate(DeleteMessageValidation{chatID, userID, messageID})
if len(varrors) > 0 {
return &vali.Varror{ValidationErrors: varrors}
}

// chat, err := s.chatRepo.FindByID(ctx, chatID)
// if err != nil {
// return &vali.Varror{Error: ErrChatNotFound}
// }
chat, err := s.chatRepo.FindByID(ctx, chatID)
if err != nil {
return &vali.Varror{Error: ErrChatNotFound}
}

// message, err := s.messageRepo.FindMessage(ctx, chatID, messageID)
// if err != nil {
// return &vali.Varror{Error: ErrNotFound}
// }
message, err := s.messageRepo.FetchMessage(ctx, chatID, messageID)
if err != nil {
return &vali.Varror{Error: ErrNotFound}
}

// if HasAccessToDeleteMessage(chat.ChatType, chat.ChatDetail, userID, *message) {
// err = s.messageRepo.Delete(ctx, chatID, messageID)
// if err != nil {
// return &vali.Varror{Error: ErrDeleteMessage}
// }
if HasAccessToDeleteMessage(chat.ChatType, chat.ChatDetail, userID, *message) {
err = s.messageRepo.Delete(ctx, chatID, messageID)
if err != nil {
return &vali.Varror{Error: ErrDeleteMessage}
}

// return nil
// }
return nil
}

// return &vali.Varror{Error: ErrAccessDenied}
return &vali.Varror{Error: ErrAccessDenied}
}

// TODO - Implement UpdateTextMessage Method For MessageService
Expand Down
9 changes: 4 additions & 5 deletions internal/service/user/user_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ func NewUserService(userRepo repository.UserRepository) UserService {
}

func (s *UserManager) UpdateProfile(ctx context.Context, userID model.UserID, name, lastName, username, biography string) *vali.Varror {
validationErrors := s.validator.Validate(UpdateProfileValidation{name, lastName, username})
if len(validationErrors) > 0 {
return &vali.Varror{ValidationErrors: validationErrors}
}
user, err := s.userRepo.FindByUserID(ctx, userID)
if err != nil {
return &vali.Varror{Error: ErrNotFound}
Expand All @@ -46,11 +50,6 @@ func (s *UserManager) UpdateProfile(ctx context.Context, userID model.UserID, na
user.Biography = biography
}

varrors := s.validator.Validate(UpdateProfileValidation{name, lastName, username})
if len(varrors) > 0 {
return &vali.Varror{ValidationErrors: varrors}
}

err = s.userRepo.Update(ctx, userID, user.Name, user.LastName, user.Username, user.Biography)
if err != nil {
return &vali.Varror{Error: ErrUpdateUser}
Expand Down
16 changes: 8 additions & 8 deletions tests/integration/repository/message_repository_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,16 +95,16 @@ func (s *MessageTestSuite) TestC_FetchLastMessage() {
require.Equal(s.T(), lastMessage.MessageID, s.savedMessageID)
}

// func (s *MessageTestSuite) TestC_FindMessage() {
// ctx := context.TODO()
func (s *MessageTestSuite) TestC_FetchMessage() {
ctx := context.TODO()

// message, err := s.repo.FindMessage(ctx, s.chatID, s.savedMessageID)
// require.NoError(s.T(), err)
message, err := s.repo.FetchMessage(ctx, s.chatID, s.savedMessageID)
require.NoError(s.T(), err)

// require.NotEmpty(s.T(), message)
// require.Equal(s.T(), message.MessageID, s.savedMessageID)
// require.Equal(s.T(), message.SenderID, s.senderID)
// }
require.NotEmpty(s.T(), message)
require.Equal(s.T(), message.MessageID, s.savedMessageID)
// require.Equal(s.T(), message.Message.SenderID, s.senderID)
}

// func (s *MessageTestSuite) TestD_UpdateTextMessage() {
// ctx := context.TODO()
Expand Down
Loading

0 comments on commit e23e813

Please sign in to comment.