github.com/jancarloviray/community@v0.41.1-0.20170124221257-33a66c87cf2f/sdk/exttest/apitest.go (about) 1 // Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved. 2 // 3 // This software (Documize Community Edition) is licensed under 4 // GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html 5 // 6 // You can operate outside the AGPL restrictions by purchasing 7 // Documize Enterprise Edition and obtaining a commercial license 8 // by contacting <sales@documize.com>. 9 // 10 // https://documize.com 11 12 package exttest 13 14 import ( 15 "bytes" 16 "github.com/documize/community/core/api/entity" 17 "github.com/documize/community/sdk" 18 "io/ioutil" 19 "os" 20 "strings" 21 "testing" 22 ) 23 24 var testFileName string 25 26 func setupTestFile() error { 27 testFileName = os.TempDir() 28 if !strings.HasSuffix(testFileName, string(os.PathSeparator)) { 29 testFileName += string(os.PathSeparator) 30 } 31 testFileName += "TESTDATA.html" 32 return ioutil.WriteFile(testFileName, []byte(` 33 <!DOCTYPE html> 34 <html> 35 <head> 36 <title>TESTDATA Title</title> 37 </head> 38 <body> 39 <h1>TESTDATA Heading</h1> 40 <p>TESTDATA paragraph.</p> 41 </body> 42 </html> 43 `), os.ModePerm) 44 } 45 46 // APItest is the main entry point for the test code, it is called by both internal and external tests. 47 func APItest(t *testing.T) { 48 setupTestFile() 49 defer os.Remove(testFileName) // ignore error 50 51 c, err := auth(t) 52 if err != nil { 53 t.Error(err) 54 t.Fail() 55 return 56 } 57 if c == nil { 58 t.Error("unable to log-in to Documize, nil pointer returned") 59 t.Fail() 60 return 61 } 62 t.Logf("INFO: Auth client=%#v\n", *c) 63 64 testMeta(t, c) 65 66 // create a testing folder here, with a defer to remove it 67 myFolder := &entity.Label{ 68 Name: "Folder created during Go unit tests", 69 // OrgID is set by the endpoint 70 UserID: c.Auth.User.RefID, 71 Type: 2, // only the user can see it 72 } 73 err = c.AddFolder(myFolder) 74 if err != nil { 75 t.Error("c.AddFolder():", err) 76 t.Fail() 77 return 78 } 79 // find a folder to move the deleted myFolder's contents to 80 fids, err := c.GetNamedFolderIDs("Test") 81 if err != nil { 82 t.Error("c.GetNamedFolderIDs():", err) 83 t.Fail() 84 } 85 if len(fids) == 0 { 86 t.Error("can't find a folder named Test") 87 t.Fail() 88 } 89 reserveFolder := fids[0] // use the 1st we found 90 defer func() { 91 err = c.RemoveFolder(myFolder.RefID, reserveFolder) 92 if err != nil { 93 t.Error(err) 94 } 95 }() 96 97 testFolder := myFolder.RefID 98 if testFolder == "" { 99 t.Error("myFolder.RefID is empty!") 100 t.Fail() 101 return 102 } 103 t.Log("INFO: myFolder.RefID='" + testFolder + "'") 104 105 testFile := loadFile(c, t, testFolder, testFileName) 106 testData := loadData(c, t, testFolder) 107 108 testPages(t, c, testFolder, testFile, testData) 109 110 testFolderAPI(t, c, testFolder, testFile) 111 testSearch(t, c, testFolder, testFile) 112 testDownload(t, c, testFolder, testFile) 113 114 testGetUpdDocument(t, c, testFile, testData) 115 testGetDocumentMeta(t, c, testFile, testData) 116 testDocAttachments(t, c, testFile, testData) 117 testTemplates(t, c, testFolder, testFile, testData) 118 testDelete(t, c, testFile, testData) 119 120 testOrg(t, c) 121 testFolders(t, c, myFolder) 122 testUsers(t, c) 123 124 } 125 126 func testOrg(t *testing.T, c *documize.Client) { 127 orgs, err := c.GetOrganizations() 128 if err != nil { 129 t.Error(err) 130 } else { 131 t.Logf("INFO: organizations = %#v", orgs) 132 } 133 if len(orgs) > 0 { 134 err = c.UpdateOrganization(&orgs[0]) 135 if err != nil { 136 t.Error(err) 137 } 138 // TODO actually check that the update did what we expected 139 } 140 } 141 142 func testGetUpdDocument(t *testing.T, c *documize.Client, testFile, testData string) { 143 var err error 144 doc, err := c.GetDocument(testFile) 145 if err != nil { 146 t.Error(err) 147 } else { 148 if doc.RefID != testFile { 149 t.Error("wrong RefId got", doc.RefID, "want", testFile) 150 } 151 } 152 153 err = c.UpdateDocument(doc) 154 if err != nil { 155 t.Error(err) 156 } 157 // NOTE updates to unknown documents do not generate errors 158 159 docData, err := c.GetDocument(testData) 160 if err != nil { 161 t.Error(err) 162 } 163 if docData.BaseEntity.RefID != testData { 164 t.Error("wrong RefID want", testData, "got", docData.RefID) 165 } 166 if _, err = c.GetDocument(""); err == nil { 167 t.Error("GetDocument did not error on empty DocumentID") 168 } else { 169 t.Log("INFO: GetDocument emptyDocID msg:", err) 170 } 171 if _, err = c.GetDocument("XXXXXXXXXXXXX"); err == nil { 172 t.Error("GetDocument did not error on bad DocumentID") 173 } else { 174 t.Log("INFO: GetDocument badDocID msg:", err) 175 } 176 } 177 178 func testGetDocumentMeta(t *testing.T, c *documize.Client, testFile, testData string) { 179 var err error 180 docM, err := c.GetDocumentMeta(testFile) 181 if err != nil { 182 t.Error(err) 183 } else { 184 if len(docM.Editors) < 2 { // TODO review 185 t.Error("wrong number of editors expected >=2 got", len(docM.Editors)) 186 } 187 } 188 docDataM, err := c.GetDocumentMeta(testData) 189 if err != nil { 190 t.Error(err) 191 } else { 192 if len(docDataM.Editors) != 2 { // TODO review 193 t.Error("wrong number of editors expected 0 got", len(docDataM.Editors)) 194 } 195 } 196 if _, err = c.GetDocumentMeta(""); err == nil { 197 t.Error("GetDocumentMeta did not error on empty DocumentID") 198 } else { 199 t.Log("INFO: GetDocumentMeta emptyDocID msg:", err) 200 } 201 /* TODO reivew 202 if _, err = c.GetDocumentMeta("XXXXXXXXXXXXX"); err == nil { 203 t.Error("GetDocumentMeta did not error on bad DocumentID") 204 } else { 205 t.Log("INFO: GetDocumentMeta badDocID msg:", err) 206 } 207 */ 208 } 209 210 func testDelete(t *testing.T, c *documize.Client, testFile, testData string) { 211 var err error 212 if err = c.DeleteDocument(testFile); err != nil { 213 t.Error(err) 214 } 215 if err = c.DeleteDocument(testData); err != nil { 216 t.Error(err) 217 } 218 if err = c.DeleteDocument(""); err == nil { 219 t.Error("DeleteDocument did not error on empty DocumentID") 220 } else { 221 t.Log("INFO: Delete Doc emptyDocID msg:", err) 222 } 223 /* TODO reivew 224 if err = c.DeleteDocument("XXXXXXXXXXXXX"); err == nil { 225 t.Error("DeleteDocument did not error on bad DocumentID") 226 } else { 227 t.Log("Delete Doc badDocID msg:", err) 228 } 229 */ 230 } 231 232 func testMeta(t *testing.T, c *documize.Client) { 233 sitemap, err := c.GetSitemap() 234 if err != nil { 235 t.Error(err) 236 } else { 237 if sitemap == nil { 238 t.Error("sitemap []byte is nil") 239 } else { 240 if !bytes.Contains(sitemap, []byte("http://www.sitemaps.org/schemas/sitemap")) { 241 t.Errorf("Incorrect Site Map: %#v", string(sitemap)) 242 } 243 } 244 } 245 robots, err := c.GetRobots() 246 if err != nil { 247 t.Error(err) 248 } else { 249 if robots == nil { 250 t.Error("robots []byte is nil") 251 } else { 252 if !bytes.HasPrefix(robots, []byte("User-agent:")) { 253 t.Errorf("Incorrect Robots data: %#v", string(robots)) 254 } 255 } 256 } 257 } 258 259 func testFolderAPI(t *testing.T, c *documize.Client, testFolder, testFile string) { 260 261 _, err := c.GetDocumentsByFolder("") 262 if err == nil { 263 t.Error("did not error on blank folder ID") 264 } else { 265 t.Log("INFO: ", err) 266 } 267 268 docs, err := c.GetDocumentsByFolder(testFolder) 269 if err != nil { 270 t.Error(err) 271 return 272 } 273 for _, doc := range docs { 274 if doc.RefID == testFile { 275 goto foundDoc 276 } 277 } 278 t.Error("Unable to find " + testFile + " in the test folder") 279 return 280 foundDoc: 281 282 docs2, err := c.GetDocumentsByFolder("什么都没有") 283 if err == nil { 284 t.Error("did not error on bad folder ID for GetDocumentsByFolder") 285 if len(docs2) != 0 { 286 t.Error("found documents in folder where there should be none") 287 } 288 } else { 289 t.Log("INFO: " + err.Error()) 290 } 291 } 292 293 func testSearch(t *testing.T, c *documize.Client, testFolder, testFile string) { 294 295 // NOTE: search does not error on blank search term 296 srch, err := c.SearchDocuments("TESTDATA") 297 if err != nil { 298 t.Error(err) 299 } 300 for _, doc := range srch { 301 //t.Logf("DEBUG search %#v", doc) 302 if doc.DocumentID == testFile { 303 goto foundSrch 304 } 305 } 306 t.Error("Unable to find " + testFileName + " in the search list") 307 foundSrch: 308 309 srch2, err := c.SearchDocuments("石磊先生是谁?") 310 if err != nil { 311 t.Error(err) 312 } 313 if len(srch2) != 0 { 314 t.Error("found documents in search where there should be none") 315 } 316 } 317 318 func testDownload(t *testing.T, c *documize.Client, testFolder, testFile string) { 319 320 nam, content, err := c.GetDocumentAsDocx(testFile) 321 if err != nil { 322 t.Error(err) 323 } else { 324 /* TODO 325 if !strings.HasPrefix(nam, "addpage") || len(content) < 10000 { 326 t.Error(" docAsDocx not as expected", nam, len(content)) 327 } 328 */ 329 } 330 331 nam, content, err = c.GetDocumentAsDocx("XXXXXXXXXX") 332 if err == nil { 333 t.Errorf("did not error on bad document id for get doc as docx, name: %s len(%d)", 334 nam, len(content)) 335 } else { 336 t.Log("INFO: get doc as docx bad doc id msg:", err) 337 } 338 339 }