Skip to content

Commit

Permalink
Merge pull request #37 from signaux-faibles/fix/card-dates
Browse files Browse the repository at this point in the history
- ArchiveCard + test
  • Loading branch information
chrnin authored Jul 31, 2023
2 parents 11c3586 + b0e55d1 commit 72f737e
Show file tree
Hide file tree
Showing 3 changed files with 169 additions and 5 deletions.
35 changes: 33 additions & 2 deletions cards.go
Original file line number Diff line number Diff line change
Expand Up @@ -417,13 +417,43 @@ func (wekan *Wekan) BuildCardFromCustomTextFieldsPipeline(name string, values []
return pipeline
}

func (wekan *Wekan) ArchiveCard(ctx context.Context, cardID CardID) error {
update, err := wekan.db.Collection("cards").UpdateOne(ctx, bson.M{
"_id": cardID,
"archived": false,
}, bson.M{
"$set": bson.M{
"archived": true,
},
"$currentDate": bson.M{
"modifiedAt": true,
"dateLastActivity": true,
},
})
if err != nil {
return UnexpectedMongoError{err}
}
if update.MatchedCount == 0 {
return CardNotFoundError{cardID}
}
if update.ModifiedCount == 0 {
return NothingDoneError{}
}
return nil
}

func (wekan *Wekan) UnarchiveCard(ctx context.Context, cardID CardID) error {
update, err := wekan.db.Collection("cards").UpdateOne(ctx, bson.M{
"_id": cardID,
"_id": cardID,
"archived": true,
}, bson.M{
"$set": bson.M{
"archived": false,
},
"$currentDate": bson.M{
"modifiedAt": true,
"dateLastActivity": true,
},
})
if err != nil {
return UnexpectedMongoError{err}
Expand Down Expand Up @@ -456,7 +486,8 @@ func (wekan *Wekan) UpdateCardDescription(ctx context.Context, cardID CardID, de
"description": description,
},
"$currentDate": bson.M{
"modifiedAt": true,
"modifiedAt": true,
"dateLastActivity": true,
},
},
)
Expand Down
133 changes: 133 additions & 0 deletions cards_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ func getElement[Element any](elements []Element, fn func(element Element) bool)
return nil
}

// createTestCard crée un objet de type `Card`, l'insère dans la base de test et le retourne
func createTestCard(t *testing.T, userID UserID, boardID *BoardID, swimlaneID *SwimlaneID, listID *ListID) Card {
ctx := context.Background()
var board Board
Expand Down Expand Up @@ -268,3 +269,135 @@ func TestCards_AddLabelToCard_whenLabelAlreadyOnBard(t *testing.T) {
ass.Contains(actualCard.LabelIDs, boardLabel.ID)
ass.Len(actualCard.LabelIDs, 1)
}

func TestCards_ArchiveCard(t *testing.T) {
ass := assert.New(t)

//GIVEN
board, swimlanes, lists := createTestBoard(t, "", 1, 1)
card := createTestCard(t, wekan.adminUserID, &board.ID, &(swimlanes[0].ID), &(lists[0].ID))

//WHEN
wekan.ArchiveCard(ctx, card.ID)
actualCard, err := wekan.GetCardFromID(ctx, card.ID)
ass.Nil(err)

//THEN
ass.Greater(actualCard.ModifiedAt, card.ModifiedAt)
ass.Greater(actualCard.DateLastActivity, card.DateLastActivity)
ass.True(actualCard.Archived)
}

func TestCards_ArchiveCard_whenCardAlreadyArchived(t *testing.T) {
ass := assert.New(t)

//GIVEN
board, swimlanes, lists := createTestBoard(t, "", 1, 1)
card := createTestCard(t, wekan.adminUserID, &board.ID, &(swimlanes[0].ID), &(lists[0].ID))
wekan.ArchiveCard(ctx, card.ID)
archivedCard, err := wekan.GetCardFromID(ctx, card.ID)
ass.Nil(err)

//WHEN
err = wekan.ArchiveCard(ctx, archivedCard.ID)

//THEN
ass.ErrorAs(err, &CardNotFoundError{})
}

func TestCards_ArchiveCard_whenCardDoesNotExists(t *testing.T) {
ass := assert.New(t)

//GIVEN
unknownCardID := CardID(t.Name() + "not an actual ID")

//WHEN
err := wekan.ArchiveCard(ctx, unknownCardID)

//THEN
ass.ErrorAs(err, &CardNotFoundError{})
}

func TestCards_UnarchiveCard(t *testing.T) {
ass := assert.New(t)

//GIVEN
board, swimlanes, lists := createTestBoard(t, "", 1, 1)
card := createTestCard(t, wekan.adminUserID, &board.ID, &(swimlanes[0].ID), &(lists[0].ID))
wekan.ArchiveCard(ctx, card.ID)
archivedCard, err := wekan.GetCardFromID(ctx, card.ID)
ass.Nil(err)

//WHEN
err = wekan.UnarchiveCard(ctx, archivedCard.ID)
ass.Nil(err)
actualCard, err := wekan.GetCardFromID(ctx, card.ID)
ass.Nil(err)

//THEN
ass.Greater(actualCard.ModifiedAt, card.ModifiedAt)
ass.Greater(actualCard.DateLastActivity, card.DateLastActivity)
ass.False(actualCard.Archived)
}

func TestCards_UnarchiveCard_whenCardNotArchived(t *testing.T) {
ass := assert.New(t)

//GIVEN
board, swimlanes, lists := createTestBoard(t, "", 1, 1)
card := createTestCard(t, wekan.adminUserID, &board.ID, &(swimlanes[0].ID), &(lists[0].ID))

//WHEN
err := wekan.UnarchiveCard(ctx, card.ID)

//THEN
ass.ErrorAs(err, &CardNotFoundError{})
}

func TestCards_UnarchiveCard_whenCardDoesNotExists(t *testing.T) {
ass := assert.New(t)

//GIVEN
unknownCardID := CardID(t.Name() + "not an actual ID")

//WHEN
err := wekan.UnarchiveCard(ctx, unknownCardID)

//THEN
ass.ErrorAs(err, &CardNotFoundError{})
}

func TestCards_UpdateCardDescription(t *testing.T) {
ass := assert.New(t)

//GIVEN
board, swimlanes, lists := createTestBoard(t, "", 1, 1)
card := createTestCard(t, wekan.adminUserID, &board.ID, &(swimlanes[0].ID), &(lists[0].ID))
description := "description originale"
wekan.UpdateCardDescription(ctx, card.ID, description)

// WHEN
newDescription := "nouvelle description"
err := wekan.UpdateCardDescription(ctx, card.ID, newDescription)
ass.Nil(err)

//THEN
actualCard, err := wekan.GetCardFromID(ctx, card.ID)
ass.Nil(err)
ass.Equal(newDescription, actualCard.Description)
ass.Greater(actualCard.ModifiedAt, card.ModifiedAt)
ass.Greater(actualCard.DateLastActivity, card.DateLastActivity)
}

func TestCards_UpdateCardDescription_WhenCardDoesntExists(t *testing.T) {
ass := assert.New(t)

//GIVEN
unknownCardID := CardID(t.Name() + "not an actual ID")

// WHEN
err := wekan.UpdateCardDescription(ctx, unknownCardID, "")

//THEN
ass.ErrorAs(err, &CardNotFoundError{})
}
6 changes: 3 additions & 3 deletions users.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ type Users []User

type User struct {
ID UserID `bson:"_id"`
CreateAt time.Time `bson:"createAt"`
CreatedAt time.Time `bson:"createAt"`
Services UserServices `bson:"services"`
Username Username `bson:"username"`
Emails []UserEmail `bson:"emails"`
Expand Down Expand Up @@ -299,8 +299,8 @@ func (user *User) BuildTemplates() UserTemplates {
// BuildUser retourne un objet User à insérer/updater avec la fonction Wekan.UpsertUser
func BuildUser(email, initials, fullname string) User {
newUser := User{
ID: UserID(newId()),
CreateAt: time.Now(),
ID: UserID(newId()),
CreatedAt: time.Now(),

Services: UserServices{
OIDC: UserServicesOIDC{
Expand Down

0 comments on commit 72f737e

Please sign in to comment.