Commit 44f7655fa9bfa9b28fef45d0140de1905b54d4e0
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
Showing
8 changed files
with
165 additions
and
45 deletions
ktwebservice/nunit/README
| ... | ... | @@ -11,6 +11,30 @@ The unit tests were written for NUnit. NUnit 2.2.0 was used during development. |
| 11 | 11 | |
| 12 | 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 | 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 | 61 | |
| 38 | 62 | http://nunit.org/ |
| 39 | 63 | http://www.mono-project.com/ |
| 64 | +http://www.unixodbc.org | ... | ... |
ktwebservice/nunit/document_add.cs
| ... | ... | @@ -8,20 +8,20 @@ namespace MonoTests.KnowledgeTree |
| 8 | 8 | public class AddDocumentTest : KTTest |
| 9 | 9 | { |
| 10 | 10 | |
| 11 | - | |
| 11 | + | |
| 12 | 12 | private int _docId; |
| 13 | 13 | private int _folderId; |
| 14 | 14 | private String _filename; |
| 15 | - private String _content; | |
| 15 | + private String _content; | |
| 16 | 16 | |
| 17 | 17 | public AddDocumentTest() : base() |
| 18 | - { | |
| 18 | + { | |
| 19 | 19 | this._folderId = 1; |
| 20 | - } | |
| 20 | + } | |
| 21 | 21 | |
| 22 | 22 | [SetUp] |
| 23 | 23 | public void SetUp() |
| 24 | - { | |
| 24 | + { | |
| 25 | 25 | this._filename = Helper.isUnix()?"/tmp/kt_unit_test1.txt":"c:\\kt_unit_test1.txt"; |
| 26 | 26 | this._content = "hello world!"; |
| 27 | 27 | |
| ... | ... | @@ -29,10 +29,10 @@ namespace MonoTests.KnowledgeTree |
| 29 | 29 | |
| 30 | 30 | [TearDown] |
| 31 | 31 | public void TearDown() |
| 32 | - { | |
| 33 | - Helper.deleteFile(this._filename); | |
| 34 | - } | |
| 35 | - | |
| 32 | + { | |
| 33 | + Helper.deleteFile(this._filename); | |
| 34 | + } | |
| 35 | + | |
| 36 | 36 | [Test] |
| 37 | 37 | public void FindDocumentBeforeAdd() |
| 38 | 38 | { |
| ... | ... | @@ -49,7 +49,7 @@ namespace MonoTests.KnowledgeTree |
| 49 | 49 | { |
| 50 | 50 | System.Console.WriteLine("document not found. that is ok!"); |
| 51 | 51 | } |
| 52 | - } | |
| 52 | + } | |
| 53 | 53 | |
| 54 | 54 | [Test] |
| 55 | 55 | public void FindFolderBeforeAdd() |
| ... | ... | @@ -67,7 +67,7 @@ namespace MonoTests.KnowledgeTree |
| 67 | 67 | { |
| 68 | 68 | if (this._verbose) System.Console.WriteLine("folder not found. that is ok!"); |
| 69 | 69 | } |
| 70 | - } | |
| 70 | + } | |
| 71 | 71 | |
| 72 | 72 | [Test] |
| 73 | 73 | public void AddDocument() |
| ... | ... | @@ -89,7 +89,7 @@ namespace MonoTests.KnowledgeTree |
| 89 | 89 | Assert.AreEqual(0, response1.status_code); |
| 90 | 90 | Assert.AreEqual("kt unit test1", response1.title); |
| 91 | 91 | Assert.AreEqual("Default", response1.document_type); |
| 92 | - Assert.AreEqual("0.1", response1.version); | |
| 92 | + Assert.AreEqual(0.1, response1.version); | |
| 93 | 93 | Assert.AreEqual("kt_unit_test1.txt", response1.filename); |
| 94 | 94 | |
| 95 | 95 | Assert.IsFalse(response1.created_date == null); |
| ... | ... | @@ -172,7 +172,7 @@ namespace MonoTests.KnowledgeTree |
| 172 | 172 | Assert.AreEqual(0, response1.status_code); |
| 173 | 173 | Assert.AreEqual(filename, response1.title); |
| 174 | 174 | Assert.AreEqual("Default", response1.document_type); |
| 175 | - Assert.AreEqual("0.1", response1.version); | |
| 175 | + Assert.AreEqual(0.1, response1.version); | |
| 176 | 176 | Assert.AreEqual("kt_unit_test1.txt", response1.filename); |
| 177 | 177 | |
| 178 | 178 | Assert.IsFalse(response1.created_date == null); | ... | ... |
ktwebservice/nunit/document_download.cs
| 1 | 1 | using NUnit.Framework; |
| 2 | 2 | using System; |
| 3 | 3 | using System.IO; |
| 4 | -using System.Net; | |
| 4 | +using System.Net; | |
| 5 | 5 | |
| 6 | 6 | namespace MonoTests.KnowledgeTree |
| 7 | -{ | |
| 8 | - | |
| 9 | - | |
| 7 | +{ | |
| 10 | 8 | [TestFixture] |
| 11 | 9 | public class DocumentSystemMetadataTest : KTTest |
| 12 | 10 | { |
| ... | ... | @@ -61,10 +59,11 @@ namespace MonoTests.KnowledgeTree |
| 61 | 59 | |
| 62 | 60 | |
| 63 | 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 | 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 | 47 | Assert.AreEqual(this._doc1.docId, linkresp.parent_document_id); |
| 48 | 48 | Assert.AreEqual(1, linkresp.links.Length); |
| 49 | 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 | 60 | response = this._kt.unlink_documents(this._session, this._doc1.docId, this._doc2.docId); |
| 52 | 61 | Assert.AreEqual(0, response.status_code); | ... | ... |
ktwebservice/nunit/document_metadata.cs
| ... | ... | @@ -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 | [TestFixture] |
| 8 | 8 | public class FolderTest : KTTest |
| 9 | 9 | { |
| 10 | - | |
| 10 | + | |
| 11 | 11 | private int _folder_id; |
| 12 | 12 | private int _subfolder_id; |
| 13 | 13 | |
| ... | ... | @@ -18,7 +18,7 @@ namespace MonoTests.KnowledgeTree |
| 18 | 18 | |
| 19 | 19 | [TearDown] |
| 20 | 20 | public void TearDown() |
| 21 | - { | |
| 21 | + { | |
| 22 | 22 | } |
| 23 | 23 | |
| 24 | 24 | [Test] |
| ... | ... | @@ -30,7 +30,7 @@ namespace MonoTests.KnowledgeTree |
| 30 | 30 | Assert.AreEqual(1, response.id); |
| 31 | 31 | Assert.AreEqual("Root Folder", response.folder_name); |
| 32 | 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 | 36 | [Test] |
| ... | ... | @@ -74,8 +74,7 @@ namespace MonoTests.KnowledgeTree |
| 74 | 74 | [Test] |
| 75 | 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 | 78 | Assert.AreEqual(0,response.status_code); |
| 80 | 79 | Assert.AreEqual(this._folder_id,response.folder_id); |
| 81 | 80 | Assert.AreEqual("kt_unit_test", response.folder_name); |
| ... | ... | @@ -86,30 +85,43 @@ namespace MonoTests.KnowledgeTree |
| 86 | 85 | Assert.AreEqual(this._subfolder_id, response2.folder_id); |
| 87 | 86 | Assert.AreEqual("subfolder", response2.folder_name); |
| 88 | 87 | Assert.AreEqual("Root Folder/kt_unit_test/subfolder", response2.full_path); |
| 89 | - } | |
| 88 | + } | |
| 90 | 89 | |
| 91 | 90 | [Test] |
| 92 | 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 | 94 | Assert.AreEqual(0, response.status_code); |
| 97 | 95 | |
| 98 | 96 | kt_folder_detail response2 = this._kt.get_folder_detail(this._session, this._subfolder_id); |
| 99 | 97 | Assert.AreEqual(0, response2.status_code); |
| 100 | 98 | Assert.AreEqual(this._subfolder_id, response2.id); |
| 101 | - Assert.AreEqual("subfolder2", response2.folder_name); | |
| 99 | + Assert.AreEqual("subfolde'r2", response2.folder_name); | |
| 102 | 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 | 104 | [Test] |
| 107 | 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 | 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 | 3 | using System.Net; |
| 4 | 4 | using System.IO; |
| 5 | 5 | using System.Collections; |
| 6 | +using System.Data; | |
| 7 | +using System.Data.Odbc; | |
| 6 | 8 | |
| 7 | 9 | namespace MonoTests.KnowledgeTree |
| 8 | 10 | { |
| ... | ... | @@ -22,17 +24,56 @@ namespace MonoTests.KnowledgeTree |
| 22 | 24 | { |
| 23 | 25 | protected KTWebService _kt; |
| 24 | 26 | protected String _session; |
| 25 | - protected bool _verbose; | |
| 27 | + protected bool _verbose; | |
| 28 | + | |
| 26 | 29 | |
| 27 | 30 | public KTTest() |
| 28 | 31 | { |
| 29 | 32 | this._kt = new KTWebService(); |
| 30 | 33 | kt_response response = this._kt.login("admin","admin","127.0.0.1"); |
| 31 | 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 | 77 | ~KTTest() |
| 37 | 78 | { |
| 38 | 79 | this._kt.logout(this._session); |
| ... | ... | @@ -188,7 +229,7 @@ namespace MonoTests.KnowledgeTree |
| 188 | 229 | this.title = "kt unit test" + offset; |
| 189 | 230 | this.realFilename = "kt_unit_test" + offset + ".txt"; |
| 190 | 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 | 233 | this.docId = 0; |
| 193 | 234 | this.session = session; |
| 194 | 235 | this.kt = kt; |
| ... | ... | @@ -423,7 +464,6 @@ namespace MonoTests.KnowledgeTree |
| 423 | 464 | System.IO.FileStream inFile; |
| 424 | 465 | |
| 425 | 466 | byte[] binaryData; |
| 426 | - string base64String = ""; | |
| 427 | 467 | |
| 428 | 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 | 2 | PROXY=KTproxy.cs |
| 3 | 3 | WSDL=ktdms.wsdl |
| 4 | 4 | ROOT_URL=http://ktdms.trunk |
| ... | ... | @@ -8,10 +8,8 @@ all: ${RESULTS} |
| 8 | 8 | |
| 9 | 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 | 14 | KTproxy.cs: ktdms.wsdl |
| 17 | 15 | wsdl -out:${PROXY} ${WSDL} |
| ... | ... | @@ -25,8 +23,8 @@ clean: |
| 25 | 23 | clean-results: |
| 26 | 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 | 29 | %.result: %.dll |
| 32 | 30 | (export KT_ROOT_URL=${ROOT_URL}; nunit-console $<) | ... | ... |