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  }