Commit 44f7655fa9bfa9b28fef45d0140de1905b54d4e0

Authored by Conrad Vermeulen
1 parent 6946e8a9

WSA-49

"Improve the document_detail and folder_detail records to incorporate more fields available on the document"
Updated.

Committed By: Conrad Vermeulen
Reviewed By: Kevin Fourie

git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@7761 c91229c3-7414-0410-bfa2-8a42b809f60b
ktwebservice/nunit/README
@@ -11,6 +11,30 @@ The unit tests were written for NUnit. NUnit 2.2.0 was used during development. @@ -11,6 +11,30 @@ The unit tests were written for NUnit. NUnit 2.2.0 was used during development.
11 11
12 This framework was developed in Linux using Mono. 12 This framework was developed in Linux using Mono.
13 13
  14 +DATABASE
  15 +--------
  16 +
  17 +Review helper.cs to see the configuration settings. UnixODBC is used. Sample config files:
  18 +
  19 + # odbc.ini
  20 +
  21 +[ktdms]
  22 +Driver = myodbcdriver
  23 +Description = MySQL ODBC 2.50 Driver DSN
  24 +SERVER = localhost
  25 +PORT =
  26 +Socket = /tmp/mysql.sock
  27 +USER = root
  28 +Password =
  29 +Database = ktdms
  30 +OPTION = 3
  31 +
  32 + # odbcinst.ini
  33 +[myodbcdriver]
  34 +Description = MySQL ODBC 2.50 Driver DSN
  35 +Driver = /usr/lib64/unixODBC/libmyodbc3.so
  36 +
  37 +
14 The document type 'NewType' must be added to the database for the document_type.cs unit test to run. 38 The document type 'NewType' must be added to the database for the document_type.cs unit test to run.
15 39
16 40
@@ -37,3 +61,4 @@ For more information: @@ -37,3 +61,4 @@ For more information:
37 61
38 http://nunit.org/ 62 http://nunit.org/
39 http://www.mono-project.com/ 63 http://www.mono-project.com/
  64 +http://www.unixodbc.org
ktwebservice/nunit/document_add.cs
@@ -8,20 +8,20 @@ namespace MonoTests.KnowledgeTree @@ -8,20 +8,20 @@ namespace MonoTests.KnowledgeTree
8 public class AddDocumentTest : KTTest 8 public class AddDocumentTest : KTTest
9 { 9 {
10 10
11 - 11 +
12 private int _docId; 12 private int _docId;
13 private int _folderId; 13 private int _folderId;
14 private String _filename; 14 private String _filename;
15 - private String _content; 15 + private String _content;
16 16
17 public AddDocumentTest() : base() 17 public AddDocumentTest() : base()
18 - { 18 + {
19 this._folderId = 1; 19 this._folderId = 1;
20 - } 20 + }
21 21
22 [SetUp] 22 [SetUp]
23 public void SetUp() 23 public void SetUp()
24 - { 24 + {
25 this._filename = Helper.isUnix()?"/tmp/kt_unit_test1.txt":"c:\\kt_unit_test1.txt"; 25 this._filename = Helper.isUnix()?"/tmp/kt_unit_test1.txt":"c:\\kt_unit_test1.txt";
26 this._content = "hello world!"; 26 this._content = "hello world!";
27 27
@@ -29,10 +29,10 @@ namespace MonoTests.KnowledgeTree @@ -29,10 +29,10 @@ namespace MonoTests.KnowledgeTree
29 29
30 [TearDown] 30 [TearDown]
31 public void TearDown() 31 public void TearDown()
32 - {  
33 - Helper.deleteFile(this._filename);  
34 - }  
35 - 32 + {
  33 + Helper.deleteFile(this._filename);
  34 + }
  35 +
36 [Test] 36 [Test]
37 public void FindDocumentBeforeAdd() 37 public void FindDocumentBeforeAdd()
38 { 38 {
@@ -49,7 +49,7 @@ namespace MonoTests.KnowledgeTree @@ -49,7 +49,7 @@ namespace MonoTests.KnowledgeTree
49 { 49 {
50 System.Console.WriteLine("document not found. that is ok!"); 50 System.Console.WriteLine("document not found. that is ok!");
51 } 51 }
52 - } 52 + }
53 53
54 [Test] 54 [Test]
55 public void FindFolderBeforeAdd() 55 public void FindFolderBeforeAdd()
@@ -67,7 +67,7 @@ namespace MonoTests.KnowledgeTree @@ -67,7 +67,7 @@ namespace MonoTests.KnowledgeTree
67 { 67 {
68 if (this._verbose) System.Console.WriteLine("folder not found. that is ok!"); 68 if (this._verbose) System.Console.WriteLine("folder not found. that is ok!");
69 } 69 }
70 - } 70 + }
71 71
72 [Test] 72 [Test]
73 public void AddDocument() 73 public void AddDocument()
@@ -89,7 +89,7 @@ namespace MonoTests.KnowledgeTree @@ -89,7 +89,7 @@ namespace MonoTests.KnowledgeTree
89 Assert.AreEqual(0, response1.status_code); 89 Assert.AreEqual(0, response1.status_code);
90 Assert.AreEqual("kt unit test1", response1.title); 90 Assert.AreEqual("kt unit test1", response1.title);
91 Assert.AreEqual("Default", response1.document_type); 91 Assert.AreEqual("Default", response1.document_type);
92 - Assert.AreEqual("0.1", response1.version); 92 + Assert.AreEqual(0.1, response1.version);
93 Assert.AreEqual("kt_unit_test1.txt", response1.filename); 93 Assert.AreEqual("kt_unit_test1.txt", response1.filename);
94 94
95 Assert.IsFalse(response1.created_date == null); 95 Assert.IsFalse(response1.created_date == null);
@@ -172,7 +172,7 @@ namespace MonoTests.KnowledgeTree @@ -172,7 +172,7 @@ namespace MonoTests.KnowledgeTree
172 Assert.AreEqual(0, response1.status_code); 172 Assert.AreEqual(0, response1.status_code);
173 Assert.AreEqual(filename, response1.title); 173 Assert.AreEqual(filename, response1.title);
174 Assert.AreEqual("Default", response1.document_type); 174 Assert.AreEqual("Default", response1.document_type);
175 - Assert.AreEqual("0.1", response1.version); 175 + Assert.AreEqual(0.1, response1.version);
176 Assert.AreEqual("kt_unit_test1.txt", response1.filename); 176 Assert.AreEqual("kt_unit_test1.txt", response1.filename);
177 177
178 Assert.IsFalse(response1.created_date == null); 178 Assert.IsFalse(response1.created_date == null);
ktwebservice/nunit/document_download.cs
1 using NUnit.Framework; 1 using NUnit.Framework;
2 using System; 2 using System;
3 using System.IO; 3 using System.IO;
4 -using System.Net; 4 +using System.Net;
5 5
6 namespace MonoTests.KnowledgeTree 6 namespace MonoTests.KnowledgeTree
7 -{  
8 -  
9 - 7 +{
10 [TestFixture] 8 [TestFixture]
11 public class DocumentSystemMetadataTest : KTTest 9 public class DocumentSystemMetadataTest : KTTest
12 { 10 {
@@ -61,10 +59,11 @@ namespace MonoTests.KnowledgeTree @@ -61,10 +59,11 @@ namespace MonoTests.KnowledgeTree
61 59
62 60
63 long length = Helper.ConvertBase64EncodingToFile(update_resp.message, filename); 61 long length = Helper.ConvertBase64EncodingToFile(update_resp.message, filename);
64 - //System.Console.WriteLine(Helper.readFile(filename)); 62 + System.Console.WriteLine(Helper.readFile(filename));
65 63
66 // TODO - why??? 64 // TODO - why???
67 - //Assert.AreEqual(length, this._doc1.filesize); 65 + Assert.AreEqual(length, this._doc1.filesize+1);
  66 +
68 } 67 }
69 } 68 }
70 } 69 }
ktwebservice/nunit/document_links.cs
@@ -47,6 +47,15 @@ namespace MonoTests.KnowledgeTree @@ -47,6 +47,15 @@ namespace MonoTests.KnowledgeTree
47 Assert.AreEqual(this._doc1.docId, linkresp.parent_document_id); 47 Assert.AreEqual(this._doc1.docId, linkresp.parent_document_id);
48 Assert.AreEqual(1, linkresp.links.Length); 48 Assert.AreEqual(1, linkresp.links.Length);
49 Assert.AreEqual(this._doc2.docId, linkresp.links[0].document_id); 49 Assert.AreEqual(this._doc2.docId, linkresp.links[0].document_id);
  50 + Assert.AreEqual(this._doc2.title, linkresp.links[0].title);
  51 + Assert.AreEqual("Default", linkresp.links[0].document_type);
  52 + Assert.AreEqual(this._doc2.filesize+1, linkresp.links[0].filesize);
  53 + Assert.AreEqual(0.1, linkresp.links[0].version);
  54 + Assert.AreEqual("n/a", linkresp.links[0].workflow);
  55 + Assert.AreEqual("n/a", linkresp.links[0].workflow_state);
  56 + Assert.AreEqual("Reference", linkresp.links[0].link_type);
  57 + Assert.AreEqual("n/a", linkresp.links[0].custom_document_no);
  58 + Assert.AreEqual("n/a", linkresp.links[0].oem_document_no);
50 59
51 response = this._kt.unlink_documents(this._session, this._doc1.docId, this._doc2.docId); 60 response = this._kt.unlink_documents(this._session, this._doc1.docId, this._doc2.docId);
52 Assert.AreEqual(0, response.status_code); 61 Assert.AreEqual(0, response.status_code);
ktwebservice/nunit/document_metadata.cs
@@ -108,5 +108,42 @@ namespace MonoTests.KnowledgeTree @@ -108,5 +108,42 @@ namespace MonoTests.KnowledgeTree
108 108
109 } 109 }
110 110
  111 + [Test]
  112 + public void UpdateDocumentMetadataWithSpecialCharactersTest()
  113 + {
  114 + kt_metadata_fieldset[] fs = new kt_metadata_fieldset[1];
  115 + fs[0] = new kt_metadata_fieldset();
  116 + fs[0].fieldset = "General information";
  117 + fs[0].fields = new kt_metadata_field[3];
  118 + fs[0].fields[0] = new kt_metadata_field();
  119 + fs[0].fields[0].name = "Document Author";
  120 + fs[0].fields[0].value = "Joe \\Soap";
  121 + fs[0].fields[1] = new kt_metadata_field();
  122 + fs[0].fields[1].name = "Category";
  123 + fs[0].fields[1].value = "Tec/hn\\ical/";
  124 + fs[0].fields[2] = new kt_metadata_field();
  125 + fs[0].fields[2].name = "Media Type";
  126 + fs[0].fields[2].value = "Text'";
  127 +
  128 + kt_sysdata_item[] sysdata = new kt_sysdata_item[0];
  129 +
  130 + kt_document_detail update_resp = this._kt.update_document_metadata(this._session, this._docId, fs, sysdata);
  131 + Assert.AreEqual(0, update_resp.status_code);
  132 + Assert.AreEqual("General information", update_resp.metadata[1].fieldset);
  133 +
  134 + Assert.AreEqual("Document Author", update_resp.metadata[1].fields[0].name);
  135 + Assert.AreEqual("Joe \\Soap", update_resp.metadata[1].fields[0].value);
  136 +
  137 + Assert.AreEqual("Category", update_resp.metadata[1].fields[1].name);
  138 + Assert.AreEqual("Tec/hn\\ical/", update_resp.metadata[1].fields[1].value);
  139 +
  140 + Assert.AreEqual("Media Type", update_resp.metadata[1].fields[2].name);
  141 + Assert.AreEqual("Text'", update_resp.metadata[1].fields[2].value);
  142 +
  143 +
  144 + }
  145 +
  146 +
  147 +
111 } 148 }
112 } 149 }
ktwebservice/nunit/folder.cs
@@ -7,7 +7,7 @@ namespace MonoTests.KnowledgeTree @@ -7,7 +7,7 @@ namespace MonoTests.KnowledgeTree
7 [TestFixture] 7 [TestFixture]
8 public class FolderTest : KTTest 8 public class FolderTest : KTTest
9 { 9 {
10 - 10 +
11 private int _folder_id; 11 private int _folder_id;
12 private int _subfolder_id; 12 private int _subfolder_id;
13 13
@@ -18,7 +18,7 @@ namespace MonoTests.KnowledgeTree @@ -18,7 +18,7 @@ namespace MonoTests.KnowledgeTree
18 18
19 [TearDown] 19 [TearDown]
20 public void TearDown() 20 public void TearDown()
21 - { 21 + {
22 } 22 }
23 23
24 [Test] 24 [Test]
@@ -30,7 +30,7 @@ namespace MonoTests.KnowledgeTree @@ -30,7 +30,7 @@ namespace MonoTests.KnowledgeTree
30 Assert.AreEqual(1, response.id); 30 Assert.AreEqual(1, response.id);
31 Assert.AreEqual("Root Folder", response.folder_name); 31 Assert.AreEqual("Root Folder", response.folder_name);
32 Assert.AreEqual(0, response.parent_id); 32 Assert.AreEqual(0, response.parent_id);
33 - Assert.AreEqual("/Root Folder", response.full_path); // ??? DOESNT SEEM CONSISTENT - should be 'Root Filder' 33 + Assert.AreEqual("Root Folder", response.full_path);
34 } 34 }
35 35
36 [Test] 36 [Test]
@@ -74,8 +74,7 @@ namespace MonoTests.KnowledgeTree @@ -74,8 +74,7 @@ namespace MonoTests.KnowledgeTree
74 [Test] 74 [Test]
75 public void GetFolderContents() 75 public void GetFolderContents()
76 { 76 {
77 -  
78 - kt_folder_contents response = this._kt.get_folder_contents(this._session, this._folder_id, 1, "DF"); 77 + kt_folder_contents response = this._kt.get_folder_contents(this._session, this._folder_id, 1, "DF");
79 Assert.AreEqual(0,response.status_code); 78 Assert.AreEqual(0,response.status_code);
80 Assert.AreEqual(this._folder_id,response.folder_id); 79 Assert.AreEqual(this._folder_id,response.folder_id);
81 Assert.AreEqual("kt_unit_test", response.folder_name); 80 Assert.AreEqual("kt_unit_test", response.folder_name);
@@ -86,30 +85,43 @@ namespace MonoTests.KnowledgeTree @@ -86,30 +85,43 @@ namespace MonoTests.KnowledgeTree
86 Assert.AreEqual(this._subfolder_id, response2.folder_id); 85 Assert.AreEqual(this._subfolder_id, response2.folder_id);
87 Assert.AreEqual("subfolder", response2.folder_name); 86 Assert.AreEqual("subfolder", response2.folder_name);
88 Assert.AreEqual("Root Folder/kt_unit_test/subfolder", response2.full_path); 87 Assert.AreEqual("Root Folder/kt_unit_test/subfolder", response2.full_path);
89 - } 88 + }
90 89
91 [Test] 90 [Test]
92 public void RenameFolder() 91 public void RenameFolder()
93 { 92 {
94 -  
95 - kt_response response = this._kt.rename_folder(this._session, this._subfolder_id, "subfolder2"); 93 + kt_response response = this._kt.rename_folder(this._session, this._subfolder_id, "subfolde'r2");
96 Assert.AreEqual(0, response.status_code); 94 Assert.AreEqual(0, response.status_code);
97 95
98 kt_folder_detail response2 = this._kt.get_folder_detail(this._session, this._subfolder_id); 96 kt_folder_detail response2 = this._kt.get_folder_detail(this._session, this._subfolder_id);
99 Assert.AreEqual(0, response2.status_code); 97 Assert.AreEqual(0, response2.status_code);
100 Assert.AreEqual(this._subfolder_id, response2.id); 98 Assert.AreEqual(this._subfolder_id, response2.id);
101 - Assert.AreEqual("subfolder2", response2.folder_name); 99 + Assert.AreEqual("subfolde'r2", response2.folder_name);
102 Assert.AreEqual(this._folder_id, response2.parent_id); 100 Assert.AreEqual(this._folder_id, response2.parent_id);
103 - Assert.AreEqual("Root Folder/kt_unit_test/subfolder2", response2.full_path);  
104 - } 101 + Assert.AreEqual("Root Folder/kt_unit_test/subfolde'r2", response2.full_path);
  102 + }
105 103
106 [Test] 104 [Test]
107 public void RemoveFolder() 105 public void RemoveFolder()
108 { 106 {
109 -  
110 - kt_response response = this._kt.delete_folder(this._session, this._folder_id, "unit testing remove"); 107 + kt_response response = this._kt.delete_folder(this._session, this._folder_id, "unit testing remove");
111 Assert.AreEqual(0, response.status_code); 108 Assert.AreEqual(0, response.status_code);
112 - } 109 + }
113 110
  111 + [Test]
  112 + public void AddFolderWithSpecialCharacters()
  113 + {
  114 + kt_folder_detail response = this._kt.create_folder(this._session, 1, "kt.unit.test");
  115 + Assert.AreEqual(0,response.status_code);
  116 + Assert.AreEqual("kt.unit.test",response.folder_name);
  117 +
  118 + response = this._kt.create_folder(this._session, 1, "kt ' unit \" test");
  119 + Assert.AreEqual(0,response.status_code);
  120 + Assert.AreEqual("kt ' unit \" test",response.folder_name);
  121 +
  122 + response = this._kt.create_folder(this._session, 1, "kt - unit - test");
  123 + Assert.AreEqual(0,response.status_code);
  124 + Assert.AreEqual("kt - unit - test",response.folder_name);
  125 + }
114 } 126 }
115 } 127 }
ktwebservice/nunit/helper.cs
@@ -3,6 +3,8 @@ using System.Text; @@ -3,6 +3,8 @@ using System.Text;
3 using System.Net; 3 using System.Net;
4 using System.IO; 4 using System.IO;
5 using System.Collections; 5 using System.Collections;
  6 +using System.Data;
  7 +using System.Data.Odbc;
6 8
7 namespace MonoTests.KnowledgeTree 9 namespace MonoTests.KnowledgeTree
8 { 10 {
@@ -22,17 +24,56 @@ namespace MonoTests.KnowledgeTree @@ -22,17 +24,56 @@ namespace MonoTests.KnowledgeTree
22 { 24 {
23 protected KTWebService _kt; 25 protected KTWebService _kt;
24 protected String _session; 26 protected String _session;
25 - protected bool _verbose; 27 + protected bool _verbose;
  28 +
26 29
27 public KTTest() 30 public KTTest()
28 { 31 {
29 this._kt = new KTWebService(); 32 this._kt = new KTWebService();
30 kt_response response = this._kt.login("admin","admin","127.0.0.1"); 33 kt_response response = this._kt.login("admin","admin","127.0.0.1");
31 this._session = response.message; 34 this._session = response.message;
32 - this._verbose = false;  
33 - 35 + this._verbose = false;
  36 + this.setupDb();
34 } 37 }
35 38
  39 + void setupDb()
  40 + {
  41 +
  42 + String connectionString = "DSN=ktdms;" + "UID=root;" + "PWD=";
  43 + try
  44 + {
  45 + IDbConnection dbcon = new OdbcConnection(connectionString);
  46 + if (dbcon == null)
  47 + {
  48 + System.Console.WriteLine("Cannot create connection");
  49 + }
  50 + dbcon.Open();
  51 + IDbCommand dbcmd = dbcon.CreateCommand();
  52 + if (dbcmd == null)
  53 + {
  54 + System.Console.WriteLine("Cannot create command");
  55 + }
  56 + dbcmd.CommandText = "DELETE FROM folders WHERE id > 1";
  57 + dbcmd.CommandType = CommandType.Text;
  58 + dbcmd.ExecuteNonQuery();
  59 + dbcmd.CommandText = "DELETE FROM documents";
  60 + dbcmd.CommandType = CommandType.Text;
  61 + dbcmd.ExecuteNonQuery();
  62 + dbcmd.CommandText = "DELETE FROM document_types_lookup WHERE name = 'NewType'";
  63 + dbcmd.ExecuteNonQuery();
  64 + dbcmd.CommandText = "INSERT INTO document_types_lookup(id,name) VALUES(2,'NewType')";
  65 + dbcmd.ExecuteNonQuery();
  66 + dbcmd.Dispose();
  67 + dbcmd = null;
  68 + dbcon.Close();
  69 + dbcon = null;
  70 + }
  71 + catch(Exception ex)
  72 + {
  73 + System.Console.WriteLine(ex.Message);
  74 + }
  75 + }
  76 +
36 ~KTTest() 77 ~KTTest()
37 { 78 {
38 this._kt.logout(this._session); 79 this._kt.logout(this._session);
@@ -188,7 +229,7 @@ namespace MonoTests.KnowledgeTree @@ -188,7 +229,7 @@ namespace MonoTests.KnowledgeTree
188 this.title = "kt unit test" + offset; 229 this.title = "kt unit test" + offset;
189 this.realFilename = "kt_unit_test" + offset + ".txt"; 230 this.realFilename = "kt_unit_test" + offset + ".txt";
190 this.filename = (Helper.isUnix()?("/tmp/"):("c:\\")) + this.realFilename; 231 this.filename = (Helper.isUnix()?("/tmp/"):("c:\\")) + this.realFilename;
191 - this.content = "hello world!"; 232 + this.content = "Hello World!\nThis is a test! And more!\n\n\r\n";
192 this.docId = 0; 233 this.docId = 0;
193 this.session = session; 234 this.session = session;
194 this.kt = kt; 235 this.kt = kt;
@@ -423,7 +464,6 @@ namespace MonoTests.KnowledgeTree @@ -423,7 +464,6 @@ namespace MonoTests.KnowledgeTree
423 System.IO.FileStream inFile; 464 System.IO.FileStream inFile;
424 465
425 byte[] binaryData; 466 byte[] binaryData;
426 - string base64String = "";  
427 467
428 try 468 try
429 { 469 {
ktwebservice/nunit/makefile
1 -RESULTS= authentication.result document_detail.result document_add.result document_checkout.result document_type.result document_links.result document_owner.result document_rename.result document_history.result document_workflow.result document_copy.result folder.result document_metadata.result document_system_metadata.result query.result document_download.result 1 +RESULTS= authentication.result document_detail.result document_contents.result document_history.result folder.result document_metadata.result document_add.result document_checkout.result document_type.result document_links.result document_owner.result document_rename.result document_workflow.result document_copy.result document_system_metadata.result query.result document_download.result
2 PROXY=KTproxy.cs 2 PROXY=KTproxy.cs
3 WSDL=ktdms.wsdl 3 WSDL=ktdms.wsdl
4 ROOT_URL=http://ktdms.trunk 4 ROOT_URL=http://ktdms.trunk
@@ -8,10 +8,8 @@ all: ${RESULTS} @@ -8,10 +8,8 @@ all: ${RESULTS}
8 8
9 results: clean-results ${RESULTS} 9 results: clean-results ${RESULTS}
10 10
11 -KTproxy.dll: KTproxy.cs helper.cs  
12 - mcs -r:System.Web.Services /target:library KTproxy.cs helper.cs  
13 -  
14 - 11 +KTproxy.dll: KTproxy.cs helper.cs
  12 + mcs -r:System.Web.Services -r:System.Data.dll /target:library KTproxy.cs helper.cs
15 13
16 KTproxy.cs: ktdms.wsdl 14 KTproxy.cs: ktdms.wsdl
17 wsdl -out:${PROXY} ${WSDL} 15 wsdl -out:${PROXY} ${WSDL}
@@ -25,8 +23,8 @@ clean: @@ -25,8 +23,8 @@ clean:
25 clean-results: 23 clean-results:
26 rm -f ${RESULTS} 24 rm -f ${RESULTS}
27 25
28 -%.dll: %.cs KTproxy.dll  
29 - mcs -r:System.Web.Services -r:nunit.framework /r:KTproxy.dll -debug /target:library -out:$@ $< 26 +%.dll: %.cs KTproxy.dll
  27 + mcs -r:System.Web.Services -r:nunit.framework /r:KTproxy.dll -debug /target:library -out:$@ $<
30 28
31 %.result: %.dll 29 %.result: %.dll
32 (export KT_ROOT_URL=${ROOT_URL}; nunit-console $<) 30 (export KT_ROOT_URL=${ROOT_URL}; nunit-console $<)