func TestMessageListSaved(t *testing.T) { runner, handler := getTestHandler() defer runner.Close() Convey("while testing message list save", t, func() { account := models.CreateAccountWithTest() channel := models.CreateChannelWithTest(account.Id) cm := models.CreateMessage(channel.Id, account.Id, models.ChannelMessage_TYPE_POST) Convey("messages can be saved", func() { cmls, err := cm.GetChannelMessageLists() So(err, ShouldBeNil) So(len(cmls), ShouldBeGreaterThan, 0) So(handler.MessageListSaved(&cmls[0]), ShouldBeNil) So(doBasicTestForMessage(handler, cmls[0].MessageId), ShouldBeNil) }) Convey("messages can be cross-indexed", func() { c1 := models.CreateChannelWithTest(account.Id) _, err := c1.AddMessage(cm) So(err, ShouldBeNil) cmls, err := cm.GetChannelMessageLists() So(err, ShouldBeNil) So(len(cmls), ShouldEqual, 2) So(handler.MessageListSaved(&cmls[0]), ShouldBeNil) So(doBasicTestForMessage(handler, cmls[0].MessageId), ShouldBeNil) So(handler.MessageListSaved(&cmls[1]), ShouldBeNil) err = makeSureMessage(handler, cmls[1].MessageId, func(record map[string]interface{}, err error) bool { if err != nil { return false } if len((record["_tags"]).([]interface{})) != 2 { return false } return true }) So(err, ShouldBeNil) }) }) }
func TestMessageUpdated(t *testing.T) { runner, handler := getTestHandler() defer runner.Close() Convey("messages can be updated", t, func() { account := models.CreateAccountWithTest() channel := models.CreateChannelWithTest(account.Id) cm := models.CreateMessage(channel.Id, account.Id, models.ChannelMessage_TYPE_POST) cmls, err := cm.GetChannelMessageLists() So(err, ShouldBeNil) So(len(cmls), ShouldBeGreaterThan, 0) So(handler.MessageListSaved(&cmls[0]), ShouldBeNil) err = makeSureMessage(handler, cmls[0].MessageId, func(record map[string]interface{}, err error) bool { if err != nil { return false } return true }) So(err, ShouldBeNil) cm.Body = "updated body" So(cm.Update(), ShouldBeNil) So(handler.MessageUpdated(cm), ShouldBeNil) err = makeSureMessage(handler, cmls[0].MessageId, func(record map[string]interface{}, err error) bool { if err != nil { return false } if record["body"].(string) != "updated body" { return false } return true }) So(err, ShouldBeNil) }) }
func TestCollaborationOperationsEndPrivateMessage(t *testing.T) { r := runner.New("collaboration-EndPrivateMessage-tests") err := r.Init() if err != nil { panic(err) } defer r.Close() appConfig := config.MustRead(r.Conf.Path) modelhelper.Initialize(appConfig.Mongo) defer modelhelper.Close() // init with defaults mongoCache := cache.NewMongoCacheWithTTL(modelhelper.Mongo.Session) defer mongoCache.StopGC() handler := New(r.Log, mongoCache, appConfig, r.Kite) Convey("while testing EndPrivateMessage", t, func() { req := &models.Ping{ AccountId: 1, FileId: fmt.Sprintf("%d", rand.Int63()), } Convey("should be able to create the channel first", func() { creator := socialapimodels.CreateAccountWithTest() // init account c := socialapimodels.NewChannel() // init channel c.CreatorId = creator.Id // set Creator id c.TypeConstant = socialapimodels.Channel_TYPE_COLLABORATION So(c.Create(), ShouldBeNil) cp, err := c.AddParticipant(creator.Id) So(err, ShouldBeNil) So(cp, ShouldNotBeNil) req.AccountId = c.CreatorId // set real account id req.ChannelId = c.Id // set real channel id ws := &mongomodels.Workspace{ ObjectId: bson.NewObjectId(), OriginId: bson.NewObjectId(), Name: "My Workspace", Slug: "my-workspace", ChannelId: strconv.FormatInt(req.ChannelId, 10), MachineUID: bson.NewObjectId().Hex(), MachineLabel: "koding-vm-0", Owner: "cihangir", RootPath: "/home/cihangir", IsDefault: true, } So(modelhelper.CreateWorkspace(ws), ShouldBeNil) Convey("should be able to delete channel", func() { err = handler.EndPrivateMessage(req) So(err, ShouldBeNil) Convey("deleted channel should not be exist", func() { channel := socialapimodels.NewChannel() err := channel.ById(req.ChannelId) So(err, ShouldEqual, bongo.RecordNotFound) }) Convey("channel id in workspace should not be exist", func() { ws2, err := modelhelper.GetWorkspaceByChannelId( strconv.FormatInt(req.ChannelId, 10), ) So(err, ShouldEqual, mgo.ErrNotFound) So(ws2, ShouldEqual, nil) }) }) Convey("if not a participant, should not be able to delete channel", func() { req.AccountId = 1 err = handler.EndPrivateMessage(req) So(err, ShouldBeNil) Convey("channel should exist", func() { channel := socialapimodels.NewChannel() err := channel.ById(req.ChannelId) So(err, ShouldBeNil) }) }) Convey("if channel doesnt exists, should success", func() { req.ChannelId = 1 err = handler.EndPrivateMessage(req) So(err, ShouldBeNil) Convey("channel should not exist", func() { channel := socialapimodels.NewChannel() err := channel.ById(req.ChannelId) So(err, ShouldEqual, bongo.RecordNotFound) }) }) }) }) }
func TestChannelUpdatedCalculateUnreadItemCount(t *testing.T) { r := runner.New("test") if err := r.Init(); err != nil { t.Fatalf("couldnt start bongo %s", err.Error()) } defer r.Close() appConfig := config.MustRead(r.Conf.Path) modelhelper.Initialize(appConfig.Mongo) defer modelhelper.Close() groupName := models.RandomGroupName() Convey("while testing get account", t, func() { Convey("if cookie is not set, should return nil", func() { a := getAccount(&http.Request{}, models.Channel_KODING_NAME) So(a, ShouldNotBeNil) So(a.Id, ShouldBeZeroValue) }) Convey("if cookie value is not set, should return nil", func() { req, _ := http.NewRequest("GET", "/", nil) expire := time.Now().AddDate(0, 0, 1) cookie := http.Cookie{ Name: "clientId", Value: "", Path: "/", Domain: "localhost", Expires: expire, } req.AddCookie(&cookie) a := getAccount(req, models.Channel_KODING_NAME) So(a, ShouldNotBeNil) So(a.Id, ShouldBeZeroValue) }) Convey("if session doesnt have username, should return nil", func() { ses, err := modelhelper.CreateSessionForAccount("", groupName) So(err, ShouldBeNil) So(ses, ShouldNotBeNil) req, _ := http.NewRequest("GET", "/", nil) expire := time.Now().AddDate(0, 0, 1) cookie := http.Cookie{ Name: "clientId", Value: ses.ClientId, Path: "/", Domain: "localhost", Expires: expire, } req.AddCookie(&cookie) a := getAccount(req, models.Channel_KODING_NAME) So(a, ShouldNotBeNil) So(a.Id, ShouldBeZeroValue) }) Convey("if session is valid, should return account", func() { acc, err := models.CreateAccountInBothDbs() So(err, ShouldBeNil) So(acc, ShouldNotBeNil) ses, err := modelhelper.CreateSessionForAccount(acc.Nick, groupName) So(err, ShouldBeNil) So(ses, ShouldNotBeNil) req, _ := http.NewRequest("GET", "/", nil) expire := time.Now().AddDate(0, 0, 1) cookie := http.Cookie{ Name: "clientId", Value: ses.ClientId, Path: "/", Domain: "localhost", Expires: expire, } req.AddCookie(&cookie) res := getAccount(req, models.Channel_KODING_NAME) So(res, ShouldNotBeNil) So(acc.Id, ShouldEqual, res.Id) }) }) Convey("while making sure account", t, func() { Convey("if account is not in postgres", func() { nick := models.RandomName() oldAcc := &kodingmodels.Account{ Id: bson.NewObjectId(), Profile: kodingmodels.AccountProfile{ Nickname: nick, }, } err := modelhelper.CreateAccount(oldAcc) So(err, ShouldBeNil) oldUser := &kodingmodels.User{ ObjectId: bson.NewObjectId(), Password: nick, Salt: nick, Name: nick, Email: nick + "@koding.com", EmailFrequency: &kodingmodels.EmailFrequency{}, } err = modelhelper.CreateUser(oldUser) So(err, ShouldBeNil) groupName := models.RandomGroupName() _, err = makeSureAccount(groupName, nick) So(err, ShouldBeNil) Convey("should create it in postgres", func() { a := models.NewAccount() err = a.ByNick(nick) So(err, ShouldBeNil) So(a.OldId, ShouldEqual, oldAcc.Id.Hex()) Convey("should set socialAPI id in mongo", func() { oldAccFromDB, err := modelhelper.GetAccount(nick) So(err, ShouldBeNil) So(oldAccFromDB.SocialApiId, ShouldEqual, strconv.FormatInt(a.Id, 10)) }) }) }) Convey("if account is in postgres", func() { acc, err := models.CreateAccountInBothDbs() So(err, ShouldBeNil) So(acc, ShouldNotBeNil) groupName := models.RandomGroupName() _, err = makeSureAccount(groupName, acc.Nick) So(err, ShouldBeNil) Convey("should be in postgres", func() { a := models.NewAccount() err = a.ByNick(acc.Nick) So(err, ShouldBeNil) So(a.OldId, ShouldEqual, acc.OldId) Convey("should have socialAPI set", func() { oldAccFromDB, err := modelhelper.GetAccount(acc.Nick) So(err, ShouldBeNil) So(oldAccFromDB.SocialApiId, ShouldEqual, strconv.FormatInt(a.Id, 10)) }) }) }) }) Convey("while making sure group membership", t, func() { Convey("if account is not not a member", func() { account := models.CreateAccountWithTest() requester := models.CreateAccountWithTest() groupChannel := models.CreateTypedPublicChannelWithTest(account.Id, models.Channel_TYPE_GROUP) err := makeSureMembership(groupChannel, requester.Id) So(err, ShouldBeNil) Convey("should add as participant", func() { status, err := groupChannel.IsParticipant(requester.Id) So(err, ShouldBeNil) So(status, ShouldBeTrue) Convey("if account is a member", func() { err := makeSureMembership(groupChannel, requester.Id) So(err, ShouldBeNil) Convey("should be a participant", func() { status, err := groupChannel.IsParticipant(requester.Id) So(err, ShouldBeNil) So(status, ShouldBeTrue) }) }) }) }) }) }