package main import ( "encoding/json" "testing" "time" ) func TestDecodeLeadInfo(t *testing.T) { msg := `{ "id": "58f4aa0682ea74bb8", "name": "same email", "deleted": false, "salutationName": "Mr", "firstName": "same", "lastName": "email", "title": "title", "status": "New", "source": "", "industry": "", "opportunityAmount": null, "website": "", "addressStreet": "", "addressCity": "", "addressState": "", "addressCountry": "", "addressPostalCode": "", "emailAddress": "test@gmail.com", "phoneNumber": "456", "doNotCall": false, "description": "", "createdAt": "2017-04-17 11:41:58", "modifiedAt": "2017-04-18 04:41:06", "accountName": "", "password": "abcdefg", "wechatOpenID": "the user id obtained from wechat public account", "opportunityAmountCurrency": null, "opportunityAmountConverted": null, "createdById": "1", "createdByName": "Admin", "modifiedById": "58ef420cac3cf6c95", "modifiedByName": "wechat robot", "assignedUserId": "1", "assignedUserName": "Admin", "campaignId": null, "createdAccountId": null, "createdContactId": null, "createdOpportunityId": null, "avatarName": "speed-icon.jpg", "avatarId": "5959bdaa7b7714a12" }` r := crmdLead{} err := json.Unmarshal([]byte(msg), &r) //log.Println(r) AssertEqual(t, err, nil, "Decode CRM Lead Json shold be correct") AssertEqual(t, r.ID, "58f4aa0682ea74bb8", "ID mismatch ") AssertEqual(t, r.Name, "same email", "Name mismatch") AssertEqual(t, r.Deleted, false, "") AssertEqual(t, r.SalutationName, "Mr", "") AssertEqual(t, r.FirstName, "same", "") AssertEqual(t, r.LastName, "email", "") AssertEqual(t, r.Title, "title", "") AssertEqual(t, r.Status, "New", "") AssertEqual(t, r.Source, "", "") AssertEqual(t, r.Industry, "", "") AssertEqual(t, r.OpportunityAmount, 0, "") AssertEqual(t, r.Website, "", "") AssertEqual(t, r.AddressStreet, "", "") AssertEqual(t, r.AddressCity, "", "") AssertEqual(t, r.AddressState, "", "") AssertEqual(t, r.AddressCountry, "", "") AssertEqual(t, r.AddressPostalCode, "", "") AssertEqual(t, r.EmailAddress, "test@gmail.com", "") AssertEqual(t, r.PhoneNumber, "456", "") AssertEqual(t, r.DoNotCall, false, "") AssertEqual(t, r.Description, "", "") AssertEqual(t, r.CreatedAt, "2017-04-17 11:41:58", "") AssertEqual(t, r.ModifiedAt, "2017-04-18 04:41:06", "") AssertEqual(t, r.AccountName, "", "") AssertEqual(t, r.Password, "abcdefg", "") AssertEqual(t, r.WechatHitxyID, "the user id obtained from wechat public account", "") AssertEqual(t, r.OpportunityAmountCurrency, "", "") AssertEqual(t, r.OpportunityAmountConverted, 0, "") AssertEqual(t, r.CreatedByID, "1", "") AssertEqual(t, r.CreatedByName, "Admin", "") AssertEqual(t, r.ModifiedByID, "58ef420cac3cf6c95", "") AssertEqual(t, r.ModifiedByName, "wechat robot", "") AssertEqual(t, r.AssignedUserID, "1", "") AssertEqual(t, r.AssignedUserName, "Admin", "") AssertEqual(t, r.CampaignID, "", "") AssertEqual(t, r.CreatedAccountID, "", "") AssertEqual(t, r.CreatedContactID, "", "") AssertEqual(t, r.CreatedOpportunityID, "", "") AssertEqual(t, r.AvatarID, "5959bdaa7b7714a12", "") AssertEqual(t, r.AvatarName, "speed-icon.jpg", "") } func TestCrmdLeadByCompleteInfo(t *testing.T) { msg := `{ "id": "58f4aa0682ea74bb8", "name": "same email", "deleted": false, "salutationName": "", "firstName": "same", "lastName": "email", "title": "", "status": "New", "source": "", "industry": "", "opportunityAmount": 120, "website": "", "addressStreet": "", "addressCity": "", "addressState": "", "addressCountry": "", "addressPostalCode": "", "emailAddress": "test@gmail.com", "phoneNumber": "456", "doNotCall": false, "description": "", "createdAt": "2017-04-17 11:41:58", "modifiedAt": "2017-06-04 04:08:16", "accountName": "", "password": "abcdefg", "wechatOpenID": "the user id obtained from wechat public account", "opportunityAmountCurrency": "AUD", "opportunityAmountConverted": 120, "emailAddressData": [ { "emailAddress": "test@gmail.com", "lower": "test@gmail.com", "primary": true, "optOut": false, "invalid": false }, { "emailAddress": "abc@hotmail.com", "lower": "abc@hotmail.com", "primary": false, "optOut": false, "invalid": false }, { "emailAddress": "def@jjx.com.au", "lower": "def@jjx.com.au", "primary": false, "optOut": false, "invalid": false } ], "phoneNumberData": [ { "phoneNumber": "456", "primary": true, "type": "Home" }, { "phoneNumber": "123", "primary": false, "type": "Mobile" } ], "createdById": "1", "createdByName": "Admin", "modifiedById": "1", "modifiedByName": "Admin", "assignedUserId": "1", "assignedUserName": "Admin", "teamsIds": [], "teamsNames": {}, "campaignId": null, "campaignName": null, "createdAccountId": null, "createdAccountName": null, "createdContactId": null, "createdContactName": null, "createdOpportunityId": null, "createdOpportunityName": null, "avatarName": "speed-icon.jpg", "avatarId": "5959bdaa7b7714a12", "isFollowed": true, "followersIds": [ "1" ], "followersNames": { "1": "Admin" }, "imagesTypes": {} }` r := crmdLead{} err := json.Unmarshal([]byte(msg), &r) //log.Println(r) AssertEqual(t, err, nil, "") AssertEqual(t, r.ID, "58f4aa0682ea74bb8", "ID mismatch ") AssertEqual(t, r.Name, "same email", "Name mismatch") AssertEqual(t, r.Deleted, false, "") AssertEqual(t, r.SalutationName, "", "") AssertEqual(t, r.FirstName, "same", "") AssertEqual(t, r.LastName, "email", "") AssertEqual(t, r.Title, "", "") AssertEqual(t, r.Status, "New", "") AssertEqual(t, r.Source, "", "") AssertEqual(t, r.Industry, "", "") AssertEqual(t, r.OpportunityAmount, 120, "") AssertEqual(t, r.Website, "", "") AssertEqual(t, r.AddressStreet, "", "") AssertEqual(t, r.AddressCity, "", "") AssertEqual(t, r.AddressState, "", "") AssertEqual(t, r.AddressCountry, "", "") AssertEqual(t, r.AddressPostalCode, "", "") AssertEqual(t, r.EmailAddress, "test@gmail.com", "") AssertEqual(t, r.PhoneNumber, "456", "") AssertEqual(t, r.DoNotCall, false, "") AssertEqual(t, r.Description, "", "") AssertEqual(t, r.CreatedAt, "2017-04-17 11:41:58", "") AssertEqual(t, r.ModifiedAt, "2017-06-04 04:08:16", "") AssertEqual(t, r.AccountName, "", "") AssertEqual(t, r.Password, "abcdefg", "") AssertEqual(t, r.WechatHitxyID, "the user id obtained from wechat public account", "") AssertEqual(t, r.OpportunityAmountCurrency, "AUD", "") AssertEqual(t, r.OpportunityAmountConverted, 120, "") AssertEqual(t, r.CreatedByID, "1", "") AssertEqual(t, r.CreatedByName, "Admin", "") AssertEqual(t, r.ModifiedByID, "1", "") AssertEqual(t, r.ModifiedByName, "Admin", "") AssertEqual(t, r.AssignedUserID, "1", "") AssertEqual(t, r.AssignedUserName, "Admin", "") AssertEqual(t, r.CampaignID, "", "") AssertEqual(t, r.CreatedAccountID, "", "") AssertEqual(t, r.CreatedContactID, "", "") AssertEqual(t, r.CreatedOpportunityID, "", "") AssertEqual(t, r.EmailAddressData[0].EmailAddress, "test@gmail.com", "") AssertEqual(t, r.EmailAddressData[0].Lower, "test@gmail.com", "") AssertEqual(t, r.EmailAddressData[0].Primary, true, "") AssertEqual(t, r.EmailAddressData[0].OptOut, false, "") AssertEqual(t, r.EmailAddressData[0].Invalid, false, "") AssertEqual(t, r.EmailAddressData[1].EmailAddress, "abc@hotmail.com", "") AssertEqual(t, r.EmailAddressData[1].Lower, "abc@hotmail.com", "") AssertEqual(t, r.EmailAddressData[1].Primary, false, "") AssertEqual(t, r.EmailAddressData[1].OptOut, false, "") AssertEqual(t, r.EmailAddressData[1].Invalid, false, "") AssertEqual(t, r.EmailAddressData[2].EmailAddress, "def@jjx.com.au", "") AssertEqual(t, r.EmailAddressData[2].Lower, "def@jjx.com.au", "") AssertEqual(t, r.EmailAddressData[2].Primary, false, "") AssertEqual(t, r.EmailAddressData[2].OptOut, false, "") AssertEqual(t, r.EmailAddressData[2].Invalid, false, "") AssertEqual(t, r.PhoneNumberData[0].PhoneNumber, "456", "") AssertEqual(t, r.PhoneNumberData[0].Primary, true, "") AssertEqual(t, r.PhoneNumberData[0].Type, "Home", "") AssertEqual(t, r.PhoneNumberData[1].PhoneNumber, "123", "") AssertEqual(t, r.PhoneNumberData[1].Primary, false, "") AssertEqual(t, r.PhoneNumberData[1].Type, "Mobile", "") AssertEqual(t, r.AvatarID, "5959bdaa7b7714a12", "") AssertEqual(t, r.AvatarName, "speed-icon.jpg", "") } func TestSearchResult(t *testing.T) { msg := `{ "total": 2, "list": [ { "id": "58f4aa0682ea74bb8", "name": "same email", "deleted": false, "salutationName": "", "firstName": "same", "lastName": "email", "title": "", "status": "New", "source": "", "industry": "", "opportunityAmount": 120, "website": "", "addressStreet": "", "addressCity": "", "addressState": "", "addressCountry": "", "addressPostalCode": "", "emailAddress": "test@gmail.com", "phoneNumber": "456", "doNotCall": true, "description": "", "createdAt": "2017-04-17 11:41:58", "modifiedAt": "2017-06-04 06:57:48", "accountName": "", "password": "abcdefg", "wechatOpenID": "the user id obtained from wechat public account", "opportunityAmountCurrency": "AUD", "opportunityAmountConverted": 120, "createdById": "1", "createdByName": "Admin", "modifiedById": "1", "modifiedByName": "Admin", "assignedUserId": "1", "assignedUserName": "Admin", "campaignId": null, "createdAccountId": null, "createdContactId": null, "createdOpportunityId": null }, { "id": "58f4a849502da6f33", "name": "not searchable", "deleted": false, "salutationName": "Mr.", "firstName": "not", "lastName": "searchable", "title": "", "status": "New", "source": "", "industry": "", "opportunityAmount": null, "website": "", "addressStreet": "", "addressCity": "", "addressState": "", "addressCountry": "", "addressPostalCode": "", "emailAddress": null, "phoneNumber": null, "doNotCall": false, "description": "", "createdAt": "2017-04-17 11:34:33", "modifiedAt": "2017-04-18 05:09:36", "accountName": "", "password": null, "wechatOpenID": "the user id obtained from wechat public account", "opportunityAmountCurrency": null, "opportunityAmountConverted": null, "createdById": "1", "createdByName": "Admin", "modifiedById": "58ef420cac3cf6c95", "modifiedByName": "wechat robot", "assignedUserId": "1", "assignedUserName": "Admin", "campaignId": null, "createdAccountId": null, "createdContactId": null, "createdOpportunityId": null } ] }` r := crmdSearchLead{} err := json.Unmarshal([]byte(msg), &r) AssertEqual(t, err, nil, "") AssertEqual(t, r.Total, 2, "") AssertEqual(t, len(r.List), 2, "") AssertEqual(t, r.List[0].ID, "58f4aa0682ea74bb8", "") AssertEqual(t, r.List[1].ID, "58f4a849502da6f33", "") AssertEqual(t, r.List[1].AssignedUserName, "Admin", "") } func TestSearchResultZero(t *testing.T) { msg := `{"total":0,"list":[]}` r := crmdSearchLead{} err := json.Unmarshal([]byte(msg), &r) AssertEqual(t, err, nil, "") AssertEqual(t, r.Total, 0, "") AssertEqual(t, len(r.List), 0, "") } func TestGetLead(t *testing.T) { e := crmdLead{} e.FirstName = "testGetLeadById" + time.Now().Format("2006-Jan-02 15:04:05") e.LastName = "crmLead/TestGetLead" e.WechatHitxyID = "predefined-openid" + time.Now().Format("2006-Jan-02 15:04:05") e.Password = "some password" b, _ := json.Marshal(e) entity, err := crmCreateEntity("Lead", b) AssertEqual(t, err, nil, "create sample Lead should be successful") lead := entity.(crmdLead) id := lead.ID AssertEqual(t, lead.FirstName, e.FirstName, "first name should match") AssertEqual(t, lead.LastName, e.LastName, "lastname should match") AssertEqual(t, lead.WechatHitxyID, e.WechatHitxyID, "wechatOpenID should match") AssertEqual(t, lead.Password, e.Password, "password should match") //start query info, found, err := crmFindLeadByOpenID(e.WechatHitxyID) AssertEqual(t, err, nil, "finding Lead record by ID should be nil") AssertEqual(t, found, true, "we should have found our record of Lead") AssertEqual(t, info.WechatHitxyID, e.WechatHitxyID, "wechat id should be the same") //test patch lead newStatus := crmdLead{} newStatus.Status = "Dead" newStatus.ID = id newLead, err := crmPatchLeadInfo(newStatus) AssertEqual(t, err, nil, "patch status for lead shold be correct") AssertEqual(t, newLead.Status, "Dead", "Newstatus should be dead") //delete temp record deleted, _ := crmDeleteEntity("Lead", id) AssertEqual(t, deleted, true, "test record shold be deleted correctly") } func TestRegisterExistingUser(t *testing.T) { importExistingWechatUserAsLead() }