Error in updation test cases of Mongo-Driver using mtest

106 views Asked by At

This is the test function written only one testcase for successful updation but it is not working here I have only added case for updating and inserting like updating user in user_rec collection and inserting in del_user_col:

func TestDeleteUser(t *testing.T) {
    uid := primitive.NewObjectID()
    tests := []struct {
        name               string
        userID             model.UserID
        email              string
        user               model.User
        mockUpdateResponse primitive.D
        mockInsertResponse primitive.D
        mockRemoveResponse primitive.D
        expectErr          error
    }{
        {
            name:   "given valid userID and userName, expect no error",
            userID: model.UserID(uid.Hex()),
            email:  "[email protected]",
            user: model.User{
                Name: "temp",
            },
            mockUpdateResponse: bson.D{
                {"ok", 1},
                {"nModified", 1},
                {"value", 1},
            },
            mockInsertResponse: mtest.CreateSuccessResponse(),
            mockRemoveResponse: nil,
            expectErr:          nil,
        },
    }
    ctx := context.Background()
    logger, _ := test.NewNullLogger()
    mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock))
    defer mt.Close()
    for _, tt := range tests {
        mt.Run(tt.name, func(mt *mtest.T) {
            mg := Mongo{
                conn: &cMongo.Mongo{
                    Client: mt.Client,
                    DB:     mt.DB,
                },
                logger:             logger,
                collUserRec:        mt.Coll,
                collDeletedUserRec: mt.Coll,
            }
            var doc bson.D
            userBytes, err := bson.Marshal(tt.user)
            assert.Nil(t, err)
            err = bson.Unmarshal(userBytes, &doc)
            assert.Nil(t, err)
            mt.AddMockResponses(mtest.CreateCursorResponse(1, "foo.bar", mtest.FirstBatch, doc))
            mt.AddMockResponses(tt.mockInsertResponse)
            mt.AddMockResponses(tt.mockUpdateResponse)
            mt.AddMockResponses(tt.mockRemoveResponse)

            err = mg.DeleteUser(ctx, tt.userID, tt.email)
            assert.Equal(t, tt.expectErr, err)
        })
    }
}

function for this is:

  func (m *Mongo) DeleteUser(ctx context.Context, userID model.UserID, email string) error {
        log := m.logger.WithContext(ctx).WithField("userID", userID).WithField("email", email)
        if userID == "" || email == "" {
            log.WithError(svc.ErrImportantFieldMissing).Error("userID or email is missing")
            return svc.ErrImportantFieldMissing
        }
        uid, err := primitive.ObjectIDFromHex(userID.String())
        if err != nil {
            log.WithError(err).Error("error in converting userId to objectID")
            return svc.ErrBadInput
        }
        filter := bson.M{
            "_id":   uid,
            "email": email,
        }
        var userDoc doc.User
        projection := bson.D{{Key: "name", Value: 1}}
        option := options.FindOne().SetProjection(projection)
        err = m.collUserRec.FindOne(ctx, filter, option).Decode(&userDoc)
        if err != nil {
            log.WithError(err).Error("error retrieving user document")
            return svc.ErrUnexpected
        }
        err = m.insertUserInDelUserCol(ctx, userID, email, userDoc.Name)
        if err != nil {
            log.WithError(err).Error("error in adding user in deleted_user_rec")
            return err
        }
        update := bson.M{
            "$unset": bson.M{
                "email":     "",
                "name":      "",
                "apisecret": "",
            },
            //"$set": bson.M{
            //  "update_ts": time.Now(),
            //},
        }
    
        res, err := m.collUserRec.UpdateOne(ctx, filter, update)
        if err != nil {
            log.WithError(err).Error("error in removing user fields ")
            err = m.removeUserFromDelUserRec(ctx, userID)
            if err != nil {
                log.WithError(err).Error("error in deleting user from del_user_rec if update was unsuccessful")
                return errors.New("error in deleting after update error")
            }
            return svc.ErrUnexpected
        }
        if res.ModifiedCount > 0 {
            log.WithField("userID", userID).Info("removed user fields successfully")
            return nil
        }
        log.WithError(err).Error("error in removing user fields")
        err = m.removeUserFromDelUserRec(ctx, userID)
        if err != nil {
            log.WithError(err).Error("error in deleting user from del_user_rec if update was unsuccessful")
            return svc.ErrUnexpected
        }
        return svc.ErrUnexpected
    }

I have tried single test case for success but it is not working please see?

0

There are 0 answers