package main import ( "encoding/json" "fmt" "log" "testing" "time" ) func TestCrmCreateEntity(t *testing.T) { e := crmdLead{} e.FirstName = "ff" + time.Now().Format("2006-jan-02 03:04:05") e.LastName = "ll" e.Password = "pp" e.Status = "New" b, _ := json.Marshal(e) //Create entity, _ := crmCreateEntity("Lead", b) lead1, ok := entity.(crmdLead) AssertEqual(t, ok, true, "entity type should be crmdLead") //Read lead2, _ := crmGetLead(lead1.ID) AssertEqual(t, lead2.ID, lead1.ID, "lead id should be equal") //Update e.Password = "newpass" b, _ = json.Marshal(e) entity, _ = crmUpdateEntity("Lead", lead2.ID, b) lead3 := entity.(crmdLead) AssertEqual(t, lead3.ID, lead1.ID, "should be same lead") AssertEqual(t, lead3.Password, "newpass", "password should have been changed") AssertEqual(t, lead1.Password, "pp", "old password should be PP") //Delete this test lead. deleted, _ := crmDeleteEntity("Lead", lead1.ID) AssertEqual(t, deleted, true, "record should be deleted") } func TestCreateDuplicate(t *testing.T) { e := crmdLead{} e.FirstName = "ff" + time.Now().Format("2006-jan-02 03:04:05") e.LastName = "ll" e.Password = "pp" e.EmailAddress = "abc@gmail.com" e.Status = "New" e.WechatHitxyID = "someopenid" b, _ := json.Marshal(e) //create entity, _ := crmCreateEntity("Lead", b) lead1 := entity.(crmdLead) //Read entity, _ = crmGetEntity("Lead", lead1.ID) lead2 := entity.(crmdLead) AssertEqual(t, lead1.ID, lead2.ID, "lead should have been created successfully") //try to create it again entity, err := crmCreateEntity("Lead", b) AssertEqual(t, err == nil, false, "should have error for duplicates") AssertEqual(t, isErrIndicateDuplicate(err), true, "the err should be duplicate error") //delete deleted, _ := crmDeleteEntity("Lead", entity.(crmdLead).ID) AssertEqual(t, deleted, true, "test record should be deleted") } func TestCrmCreateEntityServerNotFound(t *testing.T) { e := crmdLead{} e.FirstName = "ff" + time.Now().Format("2006-jan-02 03:04:05") e.LastName = "ll" e.Password = "pp" e.Status = "New" e.WechatHitxyID = "someopenid" b, _ := json.Marshal(e) //temporarily change base url oldURL := CRMConfig.BaseURL CRMConfig.BaseURL = "https://not-exist.hitxy.org.au/" // entity, err := crmCreateEntity("Lead", b) CRMConfig.BaseURL = oldURL AssertEqual(t, isErrIndicateDuplicate(err), false, "this should not be a duplicate error") AssertEqual(t, entity, nil, "should not be able to create entity, it should be nil") } func TestCrmReplaceEntity(t *testing.T) { e := crmdLead{} e.FirstName = "ff1" + time.Now().Format("2006-jan-02 03:04:05") e.LastName = "ll1" e.Password = "pp" e.Status = "New" e.EmailAddress = "abc@gmail.com" e.WechatHitxyID = "someopenid" b, _ := json.Marshal(e) entity, err := crmCreateEntity("Lead", b) if err != nil { log.Println("--------------") log.Println(err) log.Println("--------------") } AssertEqual(t, err, nil, "create record should be successful") AssertEqual(t, isErrIndicateDuplicate(err), false, "this should not be a duplicate error") id := entity.(crmdLead).ID //put e.WechatHitxyID = "newid" e.Password = "newpass" nb, _ := json.Marshal(e) entity, err = crmReplaceEntity("Lead", id, nb) AssertEqual(t, err, nil, "put should have no error") AssertEqual(t, entity.(crmdLead).WechatHitxyID, "newid", "wechat_hitxy_id should be updated") AssertEqual(t, entity.(crmdLead).Password, "newpass", "password should have been changed to newpass") //delete deleted, _ := crmDeleteEntity("Lead", id) AssertEqual(t, deleted, true, "test record should have been deleted.") } func TestSearchEntityByID(t *testing.T) { e := crmdLead{} e.FirstName = "ff1" + time.Now().Format("2006-Jan-02 03:04:05") e.LastName = "ll1" e.Password = "pp" e.Status = "New" //e.EmailAddress = "abc@gmail.com" e.WechatHitxyID = "someopenid" b, _ := json.Marshal(e) entity, err := crmCreateEntity("Lead", b) if err != nil { log.Println("--------------") log.Println(err) log.Println("--------------") } AssertEqual(t, err, nil, "create record should be successful") AssertEqual(t, isErrIndicateDuplicate(err), false, "this should not be a duplicate error") id := entity.(crmdLead).ID obj, err := crmFindEntityByID("Lead", id) AssertEqual(t, obj.(crmdLead).ID, id, "we should found the right id") deleted, _ := crmDeleteEntity("Lead", id) AssertEqual(t, deleted, true, "deleting temp record should be true") } func TestDeleteNonExistRecord(t *testing.T) { id := "someidthatisnotexistatall" deleted, _ := crmDeleteEntity("Lead", id) AssertEqual(t, deleted, false, "deleting non-exist record should be false") } func TestSearchByAttr(t *testing.T) { ids := []string{} for i := 0; i < 10; i++ { e := crmdLead{} e.FirstName = fmt.Sprintf("%s-%d-%s", "ff", i, time.Now().Format("2006-Jan-02 03:04:05")) e.LastName = fmt.Sprintf("%s-%d", "ll", i) e.Password = fmt.Sprintf("%s-pp-%d", "pp", i) e.Status = "New" e.EmailAddress = fmt.Sprintf("abc%d@gmail.com", i) e.WechatHitxyID = fmt.Sprintf("someopenid-%d", i) b, _ := json.Marshal(e) entity, _ := crmCreateEntity("Lead", b) ids = append(ids, entity.(crmdLead).ID) log.Printf("creating %s", ids[i]) } //search for i := 0; i < 10; i++ { log.Printf("trying to match %d using email, %s", i, ids[i]) total, list, err := crmFindEntityByAttr("Lead", "emailAddress", fmt.Sprintf("abc%d@gmail.com", i)) result := list.([]crmdLead) AssertEqual(t, err, nil, "find by attr should have no error") AssertEqual(t, total, 1, "should have found 1 and only 1") AssertEqual(t, len(result), 1, "list should be 1 ") AssertEqual(t, result[0].ID, ids[i], "the id should be correct.") log.Printf("trying to match %d using WechatId,%s", i, ids[i]) total, list, err = crmFindEntityByAttr("Lead", "wechat_hitxy_id", fmt.Sprintf("someopenid-%d", i)) result = list.([]crmdLead) AssertEqual(t, err, nil, "find by attr should have no error") AssertEqual(t, total, 1, "should have found 1 and only 1") AssertEqual(t, len(result), 1, "list should be 1 ") AssertEqual(t, result[0].ID, ids[i], "the id should be correct.") } for i := 0; i < 10; i++ { crmDeleteEntity("Lead", ids[i]) log.Printf("deleting %s", ids[i]) } }