diff --git a/ktwebservice/nunit/README b/ktwebservice/nunit/README index 4f9b928..909f4ba 100644 --- a/ktwebservice/nunit/README +++ b/ktwebservice/nunit/README @@ -11,6 +11,9 @@ The unit tests were written for NUnit. NUnit 2.2.0 was used during development. This framework was developed in Linux using Mono. +The document type 'NewType' must be added to the database for the document_type.cs unit test to run. + + RUNNING THE TESTS ----------------- @@ -20,8 +23,6 @@ A makefile is provided which can be used as follows: - make // will build and run the tests -- make results // will attempt to only build results - - make clean // will remove all temporary and binary files STATE diff --git a/ktwebservice/nunit/authentication.cs b/ktwebservice/nunit/authentication.cs index d35235f..043ecfe 100644 --- a/ktwebservice/nunit/authentication.cs +++ b/ktwebservice/nunit/authentication.cs @@ -3,42 +3,42 @@ using System; using System.IO; namespace MonoTests.KnowledgeTree -{ +{ [TestFixture] public class AuthenticationTest { - + private String _session; private KnowledgeTreeService _kt; - + [SetUp] - public void SetUp() + public void SetUp() { - this._kt = new KnowledgeTreeService(); + this._kt = new KnowledgeTreeService(); } [TearDown] - public void TearDown() + public void TearDown() { } - + [Test] - public void Login() + public void Login() { - kt_response response = this._kt.login("admin","admin","127.0.0.1"); - + kt_response response = this._kt.login("admin","admin","127.0.0.1"); + Assert.AreEqual(0,response.status_code); Assert.IsFalse(response.message == null); Assert.IsFalse(response.message == ""); - - this._session = response.message; + + this._session = response.message; } - + [Test] - public void Logout() + public void Logout() { kt_response response = this._kt.logout(this._session); Assert.AreEqual(0,response.status_code); - } + } } } diff --git a/ktwebservice/nunit/document_add.cs b/ktwebservice/nunit/document_add.cs index 19b1875..662b0fd 100755 --- a/ktwebservice/nunit/document_add.cs +++ b/ktwebservice/nunit/document_add.cs @@ -3,70 +3,78 @@ using System; using System.IO; namespace MonoTests.KnowledgeTree -{ +{ [TestFixture] - public class AddDocumentTest + public class AddDocumentTest { - + private String _session; - private KnowledgeTreeService _kt; + private KnowledgeTreeService _kt; private int _docId; - private int _folderId; + private int _folderId; private String _filename; private String _content; private bool _verbose; - - + + public AddDocumentTest() + { + + this._verbose = true; + + this._folderId = 1; + } + + [SetUp] - public void SetUp() + public void SetUp() { - this._kt = new KnowledgeTreeService(); + this._kt = new KnowledgeTreeService(); //this._kt.Url = "http://ktdms.trunk/ktwebservice/webservice.php"; kt_response response = this._kt.login("admin","admin","127.0.0.1"); - this._session = response.message; - - this._filename = Helper.isUnix()?"/tmp/kt_unit_test1.txt":"c:\\kt_unit_test1.txt"; + this._session = response.message; + + this._filename = Helper.isUnix()?"/tmp/kt_unit_test1.txt":"c:\\kt_unit_test1.txt"; this._content = "hello world!"; Helper.writeFile(this._filename, this._content); - - this._verbose = false; - - this._folderId = 1; + + } [TearDown] - public void TearDown() + public void TearDown() { - this._kt.logout(this._session); - - Helper.deleteFile(this._filename); + + Helper.deleteFile(this._filename); + + + this._kt.logout(this._session); } - - - - + + + + [Test] - public void FindDocumentBeforeAdd() + public void FindDocumentBeforeAdd() { String filename = "Root Folder/kt test folder/kt unit test1"; if (this._verbose) System.Console.WriteLine("Finding document before add: " + filename); - kt_document_detail documentDetail = this._kt.get_document_detail_by_name(this._session, filename, "T"); + kt_document_detail documentDetail = this._kt.get_document_detail_by_title(this._session, 1, filename, ""); if (0 == documentDetail.status_code) { if (this._verbose) System.Console.WriteLine("Found document - deleting"); kt_response response = this._kt.delete_document(this._session, documentDetail.document_id, "Delete - cleaning up before add"); Assert.AreEqual(0, response.status_code); } - else if (this._verbose) + else if (this._verbose) { System.Console.WriteLine("document not found. that is ok!"); } - } - - + } + + [Test] - public void FindFolderBeforeAdd() + public void FindFolderBeforeAdd() { String folder = "Root Folder/kt test folder"; if (this._verbose) System.Console.WriteLine("Finding folder before add: " + folder); @@ -81,87 +89,150 @@ namespace MonoTests.KnowledgeTree { if (this._verbose) System.Console.WriteLine("folder not found. that is ok!"); } - } - - + } + + [Test] - public void AddDocument() - { + public void AddDocument() + { String folder = "kt test folder"; - + if (this._verbose) System.Console.WriteLine("Creating folder : " + folder); kt_folder_detail folderDetail = this._kt.create_folder(this._session, 1, folder); this._folderId = folderDetail.id; if (this._verbose) System.Console.WriteLine("Got folder id : " + this._folderId); - + String filename = "kt unit test1"; - + if (this._verbose) System.Console.WriteLine("Adding document : " + filename); - - + + kt_document_detail response1 = this._kt.add_base64_document(this._session, this._folderId, filename, this._filename, "Default", Helper.ConvertFileToBase64Encoding(this._filename)); - + Assert.AreEqual(0, response1.status_code); Assert.AreEqual("kt unit test1", response1.title); Assert.AreEqual("Default", response1.document_type); Assert.AreEqual("0.1", response1.version); Assert.AreEqual("kt_unit_test1.txt", response1.filename); - + Assert.IsFalse(response1.created_date == null); Assert.IsFalse(response1.created_date == ""); - + Assert.AreEqual("Administrator", response1.created_by); - + //Assert.IsTrue(response1.updated_date == null); - Assert.IsTrue("" != response1.updated_date); + Assert.IsTrue("" != response1.updated_date); + + Assert.AreEqual("Administrator", response1.updated_by); - Assert.AreEqual("Administrator", response1.updated_by); + Assert.IsTrue(response1.document_id > 0); - Assert.IsTrue(response1.document_id > 0); - Assert.AreEqual(this._folderId, response1.folder_id); - - - Assert.AreEqual("n/a",response1.workflow); - - - Assert.AreEqual("n/a",response1.workflow_state); - - Assert.AreEqual("Root Folder/" + folder + "/kt unit test1", response1.full_path); - + + + Assert.AreEqual("n/a",response1.workflow); + + + Assert.AreEqual("n/a",response1.workflow_state); + + Assert.AreEqual("Root Folder/" + folder + "/kt unit test1", response1.full_path); + this._docId = response1.document_id; } - + [Test] - public void FindDocumentBeforeDelete() + public void FindDocumentBeforeDelete() { + if (this._verbose) System.Console.WriteLine("Find document before delete"); - kt_document_detail documentDetail = this._kt.get_document_detail_by_name(this._session, "Root Folder/kt test folder/kt unit test1", "T"); + kt_document_detail documentDetail = this._kt.get_document_detail_by_name(this._session, 1, "Root Folder/kt test folder/kt unit test1", "T",""); Assert.AreEqual(0, documentDetail.status_code); Assert.AreEqual(this._docId, documentDetail.document_id); - + + + if (this._verbose) System.Console.WriteLine("Find document before delete without the Root Folder's explicit naming"); - documentDetail = this._kt.get_document_detail_by_name(this._session, "/kt test folder/kt unit test1", "T"); + documentDetail = this._kt.get_document_detail_by_title(this._session, 1, "/kt test folder/kt unit test1", ""); Assert.AreEqual(0, documentDetail.status_code); Assert.AreEqual(this._docId, documentDetail.document_id); } - + [Test] - public void DeleteDocument() + public void DeleteDocument() { if (this._verbose) System.Console.WriteLine("Deleting document"); - kt_response response = this._kt.delete_document(this._session, this._docId, "Delete - cleaning up after add"); + kt_response response = this._kt.delete_document(this._session, this._docId, "Delete - cleaning up after add"); Assert.AreEqual(0, response.status_code); } - + [Test] - public void FindDocumentAfterDelete() + public void FindDocumentAfterDelete() { if (this._verbose) System.Console.WriteLine("Checking that document is gone!"); - - kt_document_detail documentDetail = this._kt.get_document_detail_by_name(this._session, "Root Folder/kt test folder/kt unit test1", "T"); + + kt_document_detail documentDetail = this._kt.get_document_detail_by_title(this._session, 1, "Root Folder/kt test folder/kt unit test1", ""); Assert.IsTrue(0 != documentDetail.status_code); - } - + } + + + + + [Test] + public void Add2PhaseDocument() + { + + + String filename = "kt unit test31"; + + if (this._verbose) System.Console.WriteLine("Adding document : " + filename); + FileUploader uploader = new FileUploader("http://ktdms.trunk/ktwebservice/upload.php"); + + uploader.upload(this._session, this._filename); + String tempname = uploader.getFilename(); + + kt_document_detail response1 = this._kt.add_document(this._session, this._folderId, filename, this._filename, "Default", tempname); + + Assert.AreEqual(0, response1.status_code); + Assert.AreEqual(filename, response1.title); + Assert.AreEqual("Default", response1.document_type); + Assert.AreEqual("0.1", response1.version); + Assert.AreEqual("kt_unit_test1.txt", response1.filename); + + Assert.IsFalse(response1.created_date == null); + Assert.IsFalse(response1.created_date == ""); + + Assert.AreEqual("Administrator", response1.created_by); + + //Assert.IsTrue(response1.updated_date == null); + Assert.IsTrue("" != response1.updated_date); + + Assert.AreEqual("Administrator", response1.updated_by); + + Assert.IsTrue(response1.document_id > 0); + + Assert.AreEqual(this._folderId, response1.folder_id); + + + Assert.AreEqual("n/a",response1.workflow); + + + Assert.AreEqual("n/a",response1.workflow_state); + + + this._docId = response1.document_id; + + kt_response response = this._kt.delete_document(this._session, this._docId, "Delete - cleaning up after add"); + Assert.AreEqual(0, response.status_code); + } + + [Test] + public void DropFolder() + { + if (this._verbose) System.Console.WriteLine("Drop Folder!"); + + kt_response documentDetail = this._kt.delete_folder(this._session, this._folderId, "delete - cleaning up"); + Assert.AreEqual(0, documentDetail.status_code); + } + } } diff --git a/ktwebservice/nunit/document_checkout.cs b/ktwebservice/nunit/document_checkout.cs new file mode 100644 index 0000000..2816cca --- /dev/null +++ b/ktwebservice/nunit/document_checkout.cs @@ -0,0 +1,120 @@ +using NUnit.Framework; +using System; +using System.IO; + +namespace MonoTests.KnowledgeTree +{ + [TestFixture] + public class CheckoutDocumentTest + { + private String _session; + private KnowledgeTreeService _kt; + private int _docId; + private int _folderId; + private String _filename; + private String _content; + private bool _verbose; + + + [SetUp] + public void SetUp() + { + this._kt = new KnowledgeTreeService(); + kt_response response = this._kt.login("admin","admin","127.0.0.1"); + this._session = response.message; + + this._filename = Helper.isUnix()?"/tmp/kt_unit_test1.txt":"c:\\kt_unit_test1.txt"; + + String filename = "kt unit test1"; + + this._content = "hello world!"; + + Helper.writeFile(this._filename, this._content); + + this._verbose = false; + + this._folderId = 1; + + kt_document_detail response1 = this._kt.add_base64_document(this._session, this._folderId, filename, this._filename, "Default", Helper.ConvertFileToBase64Encoding(this._filename)); + + if (this._verbose && response1.status_code != 0) + { + System.Console.WriteLine("Could not create file: " + this._filename); + } + this._docId = response1.document_id; + + + } + + [TearDown] + public void TearDown() + { + + Helper.deleteFile(this._filename); + + kt_response response = this._kt.delete_document(this._session, this._docId, "Delete - cleaning up"); + if (this._verbose && response.status_code != 0) + { + System.Console.WriteLine("Could not delete file: " + this._filename); + } + + this._kt.logout(this._session); + + } + + [Test] + public void CheckoutDocument() + { + String filename = "kt unit test1"; + + if (this._verbose) System.Console.WriteLine("Checking out document : " + filename); + + kt_response response = this._kt.checkout_base64_document(this._session, this._docId, "unit test - going to checkout and then undo", false); + Assert.AreEqual(0, response.status_code); + + + response = this._kt.undo_document_checkout(this._session, this._docId, "unit test - doing undo"); + Assert.AreEqual(0, response.status_code); + } + + [Test] + public void CheckinDocument() + { + String filename = "kt unit test1"; + + if (this._verbose) System.Console.WriteLine("Checking out document : " + filename); + + kt_response response = this._kt.checkout_base64_document(this._session, this._docId, "unit test - going to checkout and then checkin", false); + Assert.AreEqual(0, response.status_code); + + + kt_document_detail checkin = this._kt.checkin_base64_document(this._session, this._docId, filename, "unit test - doing checkin", Helper.ConvertFileToBase64Encoding(this._filename), false); + Assert.AreEqual(0, checkin.status_code); + + //assert - check data checkout + } + + [Test] + public void Checkin2PhaseDocument() + { + String filename = "kt unit test1"; + + if (this._verbose) System.Console.WriteLine("Checking out document : " + filename); + + kt_response response = this._kt.checkout_document(this._session, this._docId, "unit test - going to checkout and then checkin", false); + Assert.AreEqual(0, response.status_code); + + + FileUploader uploader = new FileUploader("http://ktdms.trunk/ktwebservice/upload.php"); + + uploader.upload(this._session, this._filename); + String tempname = uploader.getFilename(); + + kt_document_detail checkin = this._kt.checkin_document(this._session, this._docId, filename, "unit test - doing checkin", tempname, false); + Assert.AreEqual(0, checkin.status_code); + } + + + + } +} diff --git a/ktwebservice/nunit/document_detail.cs b/ktwebservice/nunit/document_detail.cs new file mode 100644 index 0000000..6406f63 --- /dev/null +++ b/ktwebservice/nunit/document_detail.cs @@ -0,0 +1,123 @@ +using NUnit.Framework; +using System; +using System.IO; + +namespace MonoTests.KnowledgeTree +{ + [TestFixture] + public class DocumentDetailTest + { + private String _session; + private KnowledgeTreeService _kt; + private int _docId; + private int _folderId; + private String _filename; + private String _content; + private bool _verbose; + + + [SetUp] + public void SetUp() + { + this._kt = new KnowledgeTreeService(); + kt_response response = this._kt.login("admin","admin","127.0.0.1"); + this._session = response.message; + + this._filename = Helper.isUnix()?"/tmp/kt_unit_test1.txt":"c:\\kt_unit_test1.txt"; + + String filename = "kt unit test1"; + + this._content = "hello world!"; + + Helper.writeFile(this._filename, this._content); + + this._verbose = false; + + this._folderId = 1; + + kt_document_detail response1 = this._kt.add_base64_document(this._session, this._folderId, filename, this._filename, "Default", Helper.ConvertFileToBase64Encoding(this._filename)); + + if (this._verbose && response1.status_code != 0) + { + System.Console.WriteLine("Could not create file: " + this._filename); + } + this._docId = response1.document_id; + + + } + + [TearDown] + public void TearDown() + { + + Helper.deleteFile(this._filename); + + kt_response response = this._kt.delete_document(this._session, this._docId, "Delete - cleaning up"); + if (this._verbose && response.status_code != 0) + { + System.Console.WriteLine("Could not delete file: " + this._filename); + } + + this._kt.logout(this._session); + + } + + [Test] + public void NonExistantDocumentTest() + { + kt_document_detail response = this._kt.get_document_detail(this._session, -1,""); + Assert.IsFalse(response.status_code == 0); + } + + [Test] + public void DocumentExistanceTest() + { + kt_document_detail response = this._kt.get_document_detail(this._session, this._docId,""); + Assert.AreEqual(0, response.status_code); + Assert.AreEqual(this._docId, response.document_id); + } + + [Test] + public void GetDetailByTitleTest() + { + kt_document_detail response = this._kt.get_document_detail_by_name(this._session, 1, "Root Folder/kt unit test1", "T",""); + + Assert.AreEqual(0, response.status_code); + Assert.AreEqual(this._docId, response.document_id); + } + + + [Test] + public void GetDetailByTitle2Test() + { + kt_document_detail response = this._kt.get_document_detail_by_title(this._session, 1, "Root Folder/kt unit test1", ""); + + Assert.AreEqual(0, response.status_code); + Assert.AreEqual(this._docId, response.document_id); + } + + [Test] + public void GetDetailByFileTest() + { + kt_document_detail response = this._kt.get_document_detail_by_name(this._session, 1, "Root Folder/kt_unit_test1.txt", "F",""); + + Assert.AreEqual(0, response.status_code); + Assert.AreEqual(this._docId, response.document_id); + } + [Test] + public void GetDetailByFile2Test() + { + kt_document_detail response = this._kt.get_document_detail_by_filename(this._session, 1, "Root Folder/kt_unit_test1.txt", ""); + + Assert.AreEqual(0, response.status_code); + Assert.AreEqual(this._docId, response.document_id); + } + + [Test] + public void GetDetailByUnknownNameTest() + { + kt_document_detail response = this._kt.get_document_detail_by_name(this._session, 1, "Root Folder/kt_unit_test1.ssssdasdasd", "F",""); + Assert.IsFalse(response.status_code == 0); + } + } +} diff --git a/ktwebservice/nunit/document_download.cs b/ktwebservice/nunit/document_download.cs new file mode 100644 index 0000000..8c6ab6b --- /dev/null +++ b/ktwebservice/nunit/document_download.cs @@ -0,0 +1,85 @@ +using NUnit.Framework; +using System; +using System.IO; +using System.Net; + +namespace MonoTests.KnowledgeTree +{ + + + [TestFixture] + public class DocumentSystemMetadataTest + { + private String _session; + private KnowledgeTreeService _kt; + private int _folderId; + private bool _verbose; + private Document _doc1; + + + [SetUp] + public void SetUp() + { + this._kt = new KnowledgeTreeService(); + kt_response response = this._kt.login("admin","admin","127.0.0.1"); + this._session = response.message; + + this._folderId = 1; + + + this._doc1 = new Document(1, this._session, this._kt, this._verbose,false); + this._doc1.createFile(this._folderId); + + + this._verbose = true; + + } + + [TearDown] + public void TearDown() + { + this._doc1.deleteFile(); + + this._kt.logout(this._session); + + } + + [Test] + public void DownloadTest() + { + kt_response update_resp = this._kt.download_document(this._session, this._doc1.docId ); + Assert.AreEqual(0, update_resp.status_code); + + System.Console.WriteLine("Download...." + update_resp.message); + + String uri = update_resp.message; + + HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri); + + WebResponse response = webrequest.GetResponse(); + StreamReader sr = new StreamReader(response.GetResponseStream()); + String content = sr.ReadToEnd(); + + System.Console.WriteLine(content); + + + } + + [Test] + public void SmallDownloadTest() + { + kt_response update_resp = this._kt.download_small_document(this._session, this._doc1.docId ); + Assert.AreEqual(0, update_resp.status_code); + + String filename = Helper.isUnix()?("/tmp/kt_unit_test_tmp.txt"):("c:\\kt_unit_test_tmp.txt"); + + + + long length = Helper.ConvertBase64EncodingToFile(update_resp.message, filename); + //System.Console.WriteLine(Helper.readFile(filename)); + + // TODO - why??? + //Assert.AreEqual(length, this._doc1.filesize); + } + } +} diff --git a/ktwebservice/nunit/document_history.cs b/ktwebservice/nunit/document_history.cs new file mode 100644 index 0000000..9302a6c --- /dev/null +++ b/ktwebservice/nunit/document_history.cs @@ -0,0 +1,50 @@ +using NUnit.Framework; +using System; +using System.IO; + +namespace MonoTests.KnowledgeTree +{ + [TestFixture] + public class DocumentHistoryTest + { + private String _session; + private KnowledgeTreeService _kt; + private int _folderId; + private bool _verbose; + private Document _doc1; + + [SetUp] + public void SetUp() + { + this._kt = new KnowledgeTreeService(); + kt_response response = this._kt.login("admin","admin","127.0.0.1"); + this._session = response.message; + + this._folderId = 1; + + this._doc1 = new Document(1, this._session, this._kt, this._verbose,false); + this._doc1.createFile(this._folderId); + + this._verbose = true; + + } + + [TearDown] + public void TearDown() + { + this._doc1.deleteFile(); + + this._kt.logout(this._session); + } + + [Test] + public void ChangeTypeTest() + { + kt_document_version_history_response version_resp = this._kt.get_document_version_history(this._session, this._doc1.docId); + Assert.AreEqual(0, version_resp.status_code); + + kt_document_transaction_history_response history_resp = this._kt.get_document_transaction_history(this._session, this._doc1.docId); + Assert.AreEqual(0, history_resp.status_code); + } + } +} diff --git a/ktwebservice/nunit/document_links.cs b/ktwebservice/nunit/document_links.cs new file mode 100644 index 0000000..272a5ff --- /dev/null +++ b/ktwebservice/nunit/document_links.cs @@ -0,0 +1,77 @@ +using NUnit.Framework; +using System; +using System.IO; + +namespace MonoTests.KnowledgeTree +{ + + + [TestFixture] + public class DocumentLinkTest + { + private String _session; + private KnowledgeTreeService _kt; + private int _folderId; + private bool _verbose; + private Document _doc1; + private Document _doc2; + + + [SetUp] + public void SetUp() + { + this._kt = new KnowledgeTreeService(); + kt_response response = this._kt.login("admin","admin","127.0.0.1"); + this._session = response.message; + + this._folderId = 1; + + + this._doc1 = new Document(1, this._session, this._kt, this._verbose, false); + this._doc1.createFile(this._folderId); + this._doc2 = new Document(2, this._session, this._kt, this._verbose, false); + this._doc2.createFile(this._folderId); + + + this._verbose = true; + + } + + [TearDown] + public void TearDown() + { + this._doc1.deleteFile(); + this._doc2.deleteFile(); + + this._kt.logout(this._session); + + } + + [Test] + public void LinkingTest() + { + kt_linked_document_response linkresp = this._kt.get_document_links(this._session, this._doc1.docId); + Assert.AreEqual(0, linkresp.status_code); + Assert.AreEqual(null, linkresp.links); + + kt_response response = this._kt.link_documents(this._session, this._doc1.docId, this._doc2.docId, "Reference"); + Assert.AreEqual(0, response.status_code); + + linkresp = this._kt.get_document_links(this._session, this._doc1.docId); + Assert.AreEqual(0, linkresp.status_code); + Assert.AreEqual(this._doc1.docId, linkresp.parent_document_id); + Assert.AreEqual(1, linkresp.links.Length); + Assert.AreEqual(this._doc2.docId, linkresp.links[0].document_id); + + response = this._kt.unlink_documents(this._session, this._doc1.docId, this._doc2.docId); + Assert.AreEqual(0, response.status_code); + + linkresp = this._kt.get_document_links(this._session, this._doc1.docId); + Assert.AreEqual(0, linkresp.status_code); + Assert.AreEqual(null, linkresp.links); + + } + + + } +} diff --git a/ktwebservice/nunit/document_metadata.cs b/ktwebservice/nunit/document_metadata.cs new file mode 100644 index 0000000..b7b265b --- /dev/null +++ b/ktwebservice/nunit/document_metadata.cs @@ -0,0 +1,125 @@ +using NUnit.Framework; +using System; +using System.IO; + +namespace MonoTests.KnowledgeTree +{ + [TestFixture] + public class DocumentMetadataTest + { + private String _session; + private KnowledgeTreeService _kt; + private int _docId; + private int _folderId; + private String _filename; + private String _content; + private bool _verbose; + + + [SetUp] + public void SetUp() + { + this._kt = new KnowledgeTreeService(); + + kt_response response = this._kt.login("admin","admin","127.0.0.1"); + this._session = response.message; + + this._filename = Helper.isUnix()?"/tmp/kt_unit_test1.txt":"c:\\kt_unit_test1.txt"; + + String filename = "kt unit test1"; + + this._content = "hello world!"; + + Helper.writeFile(this._filename, this._content); + + this._verbose = false; + + this._folderId = 1; + + kt_document_detail response1 = this._kt.add_base64_document(this._session, this._folderId, filename, this._filename, "Default", Helper.ConvertFileToBase64Encoding(this._filename)); + + if (this._verbose && response1.status_code != 0) + { + System.Console.WriteLine("Could not create file: " + this._filename); + } + this._docId = response1.document_id; + + + } + + [TearDown] + public void TearDown() + { + + Helper.deleteFile(this._filename); + + kt_response response = this._kt.delete_document(this._session, this._docId, "Delete - cleaning up"); + if (this._verbose && response.status_code != 0) + { + System.Console.WriteLine("Could not delete file: " + this._filename); + } + + this._kt.logout(this._session); + + } + + [Test] + public void GetDocumentTypesTest() + { + kt_document_types_response doc_types = this._kt.get_document_types(this._session); + Assert.AreEqual(0, doc_types.status_code); + } + + [Test] + public void GetDocumentTypeMetadataTest() + { + + kt_metadata_response metadata = this._kt.get_document_type_metadata(this._session, "Default"); + Assert.AreEqual(0, metadata.status_code); + } + + [Test] + public void GetDocumentMetadataTest() + { + + kt_metadata_response metadata = this._kt.get_document_metadata(this._session, this._docId); + Assert.AreEqual(0, metadata.status_code); + } + + [Test] + public void UpdateDocumentMetadataTest() + { + kt_metadata_fieldset[] fs = new kt_metadata_fieldset[1]; + fs[0] = new kt_metadata_fieldset(); + fs[0].fieldset = "General information"; + fs[0].fields = new kt_metadata_field[3]; + fs[0].fields[0] = new kt_metadata_field(); + fs[0].fields[0].name = "Document Author"; + fs[0].fields[0].value = "Joe Soap"; + fs[0].fields[1] = new kt_metadata_field(); + fs[0].fields[1].name = "Category"; + fs[0].fields[1].value = "Technical"; + fs[0].fields[2] = new kt_metadata_field(); + fs[0].fields[2].name = "Media Type"; + fs[0].fields[2].value = "Text"; + + kt_sysdata_item[] sysdata = new kt_sysdata_item[0]; + + kt_document_detail update_resp = this._kt.update_document_metadata(this._session, this._docId, fs, sysdata); + Assert.AreEqual(0, update_resp.status_code); + Assert.AreEqual("General information", update_resp.metadata[1].fieldset); + + Assert.AreEqual("Document Author", update_resp.metadata[1].fields[0].name); + Assert.AreEqual("Joe Soap", update_resp.metadata[1].fields[0].value); + + Assert.AreEqual("Category", update_resp.metadata[1].fields[1].name); + Assert.AreEqual("Technical", update_resp.metadata[1].fields[1].value); + + Assert.AreEqual("Media Type", update_resp.metadata[1].fields[2].name); + Assert.AreEqual("Text", update_resp.metadata[1].fields[2].value); + + + } + + } +} diff --git a/ktwebservice/nunit/document_owner.cs b/ktwebservice/nunit/document_owner.cs new file mode 100644 index 0000000..56c8677 --- /dev/null +++ b/ktwebservice/nunit/document_owner.cs @@ -0,0 +1,53 @@ +using NUnit.Framework; +using System; +using System.IO; + +namespace MonoTests.KnowledgeTree +{ + [TestFixture] + public class DocumentOwnerTest + { + private String _session; + private KnowledgeTreeService _kt; + private int _folderId; + private bool _verbose; + private Document _doc1; + + [SetUp] + public void SetUp() + { + this._kt = new KnowledgeTreeService(); + kt_response response = this._kt.login("admin","admin","127.0.0.1"); + this._session = response.message; + + this._folderId = 1; + + + this._doc1 = new Document(1, this._session, this._kt, this._verbose, false); + this._doc1.createFile(this._folderId); + + this._verbose = true; + + } + + [TearDown] + public void TearDown() + { + this._doc1.deleteFile(); + + this._kt.logout(this._session); + + } + + [Test] + public void ChangeOwnerTest() + { + kt_document_detail response = this._kt.change_document_owner(this._session, this._doc1.docId, "anonymous", "just trying to change owner"); + Assert.AreEqual(0, response.status_code); + + // test to non existant user + response = this._kt.change_document_owner(this._session, this._doc1.docId, "blah", "just trying to change owner"); + Assert.IsFalse(0 == response.status_code); + } + } +} diff --git a/ktwebservice/nunit/document_rename.cs b/ktwebservice/nunit/document_rename.cs new file mode 100644 index 0000000..b6f8190 --- /dev/null +++ b/ktwebservice/nunit/document_rename.cs @@ -0,0 +1,52 @@ +using NUnit.Framework; +using System; +using System.IO; + +namespace MonoTests.KnowledgeTree +{ + [TestFixture] + public class DocumentRenameTest + { + private String _session; + private KnowledgeTreeService _kt; + private int _folderId; + private bool _verbose; + private Document _doc1; + + [SetUp] + public void SetUp() + { + this._kt = new KnowledgeTreeService(); + kt_response response = this._kt.login("admin","admin","127.0.0.1"); + this._session = response.message; + + this._folderId = 1; + + this._doc1 = new Document(1, this._session, this._kt, this._verbose,false); + this._doc1.createFile(this._folderId); + + this._verbose = true; + + } + + [TearDown] + public void TearDown() + { + this._doc1.deleteFile(); + + this._kt.logout(this._session); + } + + [Test] + public void RenameTest() + { + kt_document_detail response = this._kt.rename_document_filename(this._session, this._doc1.docId, "test fname"); + Assert.AreEqual(0, response.status_code); + Assert.AreEqual("test fname", response.filename); + + response = this._kt.rename_document_title(this._session, this._doc1.docId, "test title"); + Assert.AreEqual(0, response.status_code); + Assert.AreEqual("test title", response.title); + } + } +} diff --git a/ktwebservice/nunit/document_system_metadata.cs b/ktwebservice/nunit/document_system_metadata.cs new file mode 100644 index 0000000..729b2e2 --- /dev/null +++ b/ktwebservice/nunit/document_system_metadata.cs @@ -0,0 +1,187 @@ +using NUnit.Framework; +using System; +using System.IO; + +namespace MonoTests.KnowledgeTree +{ + + + [TestFixture] + public class DocumentSystemMetadataTest + { + private String _session; + private KnowledgeTreeService _kt; + private int _folderId; + private bool _verbose; + private Document _doc1; + private Document _doc2; + + + [SetUp] + public void SetUp() + { + this._kt = new KnowledgeTreeService(); + kt_response response = this._kt.login("admin","admin","127.0.0.1"); + this._session = response.message; + + this._folderId = 1; + + + this._doc1 = new Document(1, this._session, this._kt, this._verbose,false); + this._doc1.createFile(this._folderId); + this._doc2 = new Document(2, this._session, this._kt, this._verbose,true); + + + this._verbose = true; + + } + + [TearDown] + public void TearDown() + { + this._doc1.deleteFile(); + this._doc2.deleteFile(); + + this._kt.logout(this._session); + + } + + [Test] + public void UpdateDocumentMetadataTest() + { + + kt_metadata_fieldset[] fs = new kt_metadata_fieldset[1]; + fs[0] = new kt_metadata_fieldset(); + fs[0].fieldset = "General information"; + fs[0].fields = new kt_metadata_field[3]; + fs[0].fields[0] = new kt_metadata_field(); + fs[0].fields[0].name = "Document Author"; + fs[0].fields[0].value = "Joe Soap"; + fs[0].fields[1] = new kt_metadata_field(); + fs[0].fields[1].name = "Category"; + fs[0].fields[1].value = "Technical"; + fs[0].fields[2] = new kt_metadata_field(); + fs[0].fields[2].name = "Media Type"; + fs[0].fields[2].value = "Text"; + + kt_sysdata_item[] sysdata = new kt_sysdata_item[2]; + sysdata[0] = new kt_sysdata_item(); + sysdata[0].name = "created_by"; + sysdata[0].value = "Anonymous"; + sysdata[1] = new kt_sysdata_item(); + sysdata[1].name = "created_date"; + sysdata[1].value = "2007-01-17"; + + + kt_document_detail update_resp = this._kt.update_document_metadata(this._session, this._doc1.docId, fs, sysdata); + Assert.AreEqual(0, update_resp.status_code); + Assert.AreEqual("General information", update_resp.metadata[1].fieldset); + + Assert.AreEqual("Document Author", update_resp.metadata[1].fields[0].name); + Assert.AreEqual("Joe Soap", update_resp.metadata[1].fields[0].value); + + Assert.AreEqual("Category", update_resp.metadata[1].fields[1].name); + Assert.AreEqual("Technical", update_resp.metadata[1].fields[1].value); + + Assert.AreEqual("Media Type", update_resp.metadata[1].fields[2].name); + Assert.AreEqual("Text", update_resp.metadata[1].fields[2].value); + + Assert.AreEqual("Anonymous", update_resp.created_by); + Assert.AreEqual("2007-01-17 00:00:00", update_resp.created_date); + } + + [Test] + public void AddSmallDocumentWithMetadataTest() + { + kt_metadata_fieldset[] fs = new kt_metadata_fieldset[1]; + fs[0] = new kt_metadata_fieldset(); + fs[0].fieldset = "General information"; + fs[0].fields = new kt_metadata_field[3]; + fs[0].fields[0] = new kt_metadata_field(); + fs[0].fields[0].name = "Document Author"; + fs[0].fields[0].value = "Joe Soap"; + fs[0].fields[1] = new kt_metadata_field(); + fs[0].fields[1].name = "Category"; + fs[0].fields[1].value = "Technical"; + fs[0].fields[2] = new kt_metadata_field(); + fs[0].fields[2].name = "Media Type"; + fs[0].fields[2].value = "Text"; + + kt_sysdata_item[] sysdata = new kt_sysdata_item[2]; + sysdata[0] = new kt_sysdata_item(); + sysdata[0].name = "created_by"; + sysdata[0].value = "Anonymous"; + sysdata[1] = new kt_sysdata_item(); + sysdata[1].name = "created_date"; + sysdata[1].value = "2007-01-17"; + + this._doc2.local=false; + kt_document_detail update_resp = this._doc2.createFileWithMetadata(this._folderId, fs, sysdata); + + Assert.AreEqual(0, update_resp.status_code); + Assert.AreEqual("General information", update_resp.metadata[1].fieldset); + + Assert.AreEqual("Document Author", update_resp.metadata[1].fields[0].name); + Assert.AreEqual("Joe Soap", update_resp.metadata[1].fields[0].value); + + Assert.AreEqual("Category", update_resp.metadata[1].fields[1].name); + Assert.AreEqual("Technical", update_resp.metadata[1].fields[1].value); + + Assert.AreEqual("Media Type", update_resp.metadata[1].fields[2].name); + Assert.AreEqual("Text", update_resp.metadata[1].fields[2].value); + + Assert.AreEqual("Anonymous", update_resp.created_by); + Assert.AreEqual("2007-01-17 00:00:00", update_resp.created_date); + } + + [Test] + public void CheckinSmallDocumentWithMetadataTest() + { + kt_metadata_fieldset[] fs = new kt_metadata_fieldset[1]; + fs[0] = new kt_metadata_fieldset(); + fs[0].fieldset = "General information"; + fs[0].fields = new kt_metadata_field[3]; + fs[0].fields[0] = new kt_metadata_field(); + fs[0].fields[0].name = "Document Author"; + fs[0].fields[0].value = "Joe Soap"; + fs[0].fields[1] = new kt_metadata_field(); + fs[0].fields[1].name = "Category"; + fs[0].fields[1].value = "Technical"; + fs[0].fields[2] = new kt_metadata_field(); + fs[0].fields[2].name = "Media Type"; + fs[0].fields[2].value = "Text"; + + kt_sysdata_item[] sysdata = new kt_sysdata_item[2]; + sysdata[0] = new kt_sysdata_item(); + sysdata[0].name = "created_by"; + sysdata[0].value = "Anonymous"; + sysdata[1] = new kt_sysdata_item(); + sysdata[1].name = "created_date"; + sysdata[1].value = "2007-01-17"; + + kt_response resp = this._kt.checkout_base64_document(this._session, this._doc1.docId, "test checkin", false); + Assert.AreEqual(0, resp.status_code); + + + + kt_document_detail update_resp = this._doc1.checkinFileWithMetadata(this._folderId, fs, sysdata); + + Assert.AreEqual(0, update_resp.status_code); + Assert.AreEqual("General information", update_resp.metadata[1].fieldset); + + Assert.AreEqual("Document Author", update_resp.metadata[1].fields[0].name); + Assert.AreEqual("Joe Soap", update_resp.metadata[1].fields[0].value); + + Assert.AreEqual("Category", update_resp.metadata[1].fields[1].name); + Assert.AreEqual("Technical", update_resp.metadata[1].fields[1].value); + + Assert.AreEqual("Media Type", update_resp.metadata[1].fields[2].name); + Assert.AreEqual("Text", update_resp.metadata[1].fields[2].value); + + Assert.AreEqual("Anonymous", update_resp.created_by); + Assert.AreEqual("2007-01-17 00:00:00", update_resp.created_date); + } + + + } +} diff --git a/ktwebservice/nunit/document_type.cs b/ktwebservice/nunit/document_type.cs new file mode 100644 index 0000000..404072c --- /dev/null +++ b/ktwebservice/nunit/document_type.cs @@ -0,0 +1,62 @@ +using NUnit.Framework; +using System; +using System.IO; + +namespace MonoTests.KnowledgeTree +{ + [TestFixture] + public class DocumentOwnerTest + { + private String _session; + private KnowledgeTreeService _kt; + private int _folderId; + private bool _verbose; + private Document _doc1; + + [SetUp] + public void SetUp() + { + this._kt = new KnowledgeTreeService(); + kt_response response = this._kt.login("admin","admin","127.0.0.1"); + this._session = response.message; + + this._folderId = 1; + + + this._doc1 = new Document(1, this._session, this._kt, this._verbose,false); + this._doc1.createFile(this._folderId); + + this._verbose = true; + + } + + [TearDown] + public void TearDown() + { + this._doc1.deleteFile(); + + this._kt.logout(this._session); + + } + + [Test] + public void ChangeTypeTest() + { + // NOTE: Create the following type 'NewType' via the admin pages + + kt_document_detail response = this._kt.change_document_type(this._session, this._doc1.docId, "NewType"); + Assert.AreEqual(0, response.status_code); + if (0 != response.status_code) + { + System.Console.WriteLine("Please check that the document type 'NewType' exists in the database! This test should pass if it exists!"); + System.Console.WriteLine("SQL: insert into document_types_lookup(name) values('NewType');"); + } + + // NOTE: we need to test with an unknown type as well + + response = this._kt.change_document_type(this._session, this._doc1.docId, "UnknownType"); + Assert.IsTrue(0 != response.status_code); + + } + } +} diff --git a/ktwebservice/nunit/document_workflow.cs b/ktwebservice/nunit/document_workflow.cs new file mode 100644 index 0000000..f184492 --- /dev/null +++ b/ktwebservice/nunit/document_workflow.cs @@ -0,0 +1,98 @@ +using NUnit.Framework; +using System; +using System.IO; + +namespace MonoTests.KnowledgeTree +{ + [TestFixture] + public class WorkflowTest + { + private String _session; + private KnowledgeTreeService _kt; + private int _folderId; + private bool _verbose; + private Document _doc1; + + [SetUp] + public void SetUp() + { + this._kt = new KnowledgeTreeService(); + kt_response response = this._kt.login("admin","admin","127.0.0.1"); + this._session = response.message; + + this._folderId = 1; + + + this._doc1 = new Document(1, this._session, this._kt, this._verbose, false); + this._doc1.createFile(this._folderId); + + this._verbose = true; + } + + [TearDown] + public void TearDown() + { + this._doc1.deleteFile(); + this._kt.logout(this._session); + } + + [Test] + public void NonExistantWorkflowTest() + { + kt_document_detail response = this._kt.start_document_workflow(this._session, this._doc1.docId, "Non Existant Workflow"); + Assert.IsTrue(0 != response.status_code); + } + + [Test] + public void StartWorkflowTest() + { + kt_document_detail response = this._kt.start_document_workflow(this._session, this._doc1.docId, "Review Process"); + Assert.AreEqual(0, response.status_code); + Assert.AreEqual("Review Process", response.workflow); + } + + [Test] + public void StopWorkflowTest() + { + kt_document_detail response = this._kt.start_document_workflow(this._session, this._doc1.docId, "Review Process"); + Assert.AreEqual(0, response.status_code); + Assert.AreEqual("Review Process", response.workflow); + + response = this._kt.delete_document_workflow(this._session, this._doc1.docId); + Assert.AreEqual(0, response.status_code); + Assert.AreEqual("n/a", response.workflow); + } + + [Test] + public void GetTransitionsTest() + { + kt_document_detail response = this._kt.start_document_workflow(this._session, this._doc1.docId, "Review Process"); + Assert.AreEqual(0, response.status_code); + Assert.AreEqual("Review Process", response.workflow); + + kt_workflow_transitions_response trans_resp = this._kt.get_document_workflow_transitions(this._session, this._doc1.docId); + Assert.AreEqual(0, trans_resp.status_code); + Assert.AreEqual(1, trans_resp.transitions.Length); + Assert.AreEqual("Request Approval", trans_resp.transitions[0]); + } + + [Test] + public void WorkflowTransitionTest() + { + kt_document_detail response = this._kt.start_document_workflow(this._session, this._doc1.docId, "Review Process"); + Assert.AreEqual(0, response.status_code); + Assert.AreEqual("Review Process", response.workflow); + Assert.AreEqual("Draft", response.workflow_state); + + response = this._kt.perform_document_workflow_transition(this._session, this._doc1.docId, "Request Approval", "Please approve me"); + Assert.AreEqual(0, response.status_code); + Assert.AreEqual("Review Process", response.workflow); + Assert.AreEqual("Approval", response.workflow_state); + + response = this._kt.perform_document_workflow_transition(this._session, this._doc1.docId, "Approve", "Ok!"); + Assert.AreEqual(0, response.status_code); + Assert.AreEqual("Review Process", response.workflow); + Assert.AreEqual("Published", response.workflow_state); + } + } +} diff --git a/ktwebservice/nunit/folder.cs b/ktwebservice/nunit/folder.cs index ad90cae..7630489 100644 --- a/ktwebservice/nunit/folder.cs +++ b/ktwebservice/nunit/folder.cs @@ -3,39 +3,36 @@ using System; using System.IO; namespace MonoTests.KnowledgeTree -{ +{ [TestFixture] - public class FolderTest + public class FolderTest { - + private String _session; private KnowledgeTreeService _kt; private int _folder_id; private int _subfolder_id; - private bool _skip; - + [SetUp] - public void SetUp() + public void SetUp() { - this._skip = true; - if (this._skip) return; - this._kt = new KnowledgeTreeService(); + this._kt = new KnowledgeTreeService(); kt_response response = this._kt.login("admin","admin","127.0.0.1"); - this._session = response.message; - + this._session = response.message; + } [TearDown] - public void TearDown() + public void TearDown() { - if (this._skip) return; + this._kt.logout(this._session); } - + [Test] - public void GetFolderDetail() + public void GetFolderDetail() { - if (this._skip) return; + kt_folder_detail response = this._kt.get_folder_detail(this._session, 1); Assert.AreEqual(0, response.status_code); Assert.AreEqual(1, response.id); @@ -43,49 +40,49 @@ namespace MonoTests.KnowledgeTree Assert.AreEqual(0, response.parent_id); Assert.AreEqual("/Root Folder", response.full_path); // ??? DOESNT SEEM CONSISTENT - should be 'Root Filder' } - + [Test] - public void AddFolder() + public void AddFolder() { - if (this._skip) return; + kt_folder_detail response = this._kt.create_folder(this._session, 1, "kt_unit_test"); Assert.AreEqual(0,response.status_code); - + this._folder_id = response.id; - + response = this._kt.create_folder(this._session, this._folder_id, "subfolder"); Assert.AreEqual(0,response.status_code); - + this._subfolder_id = response.id; - - } + + } [Test] - public void GetFolderByName() + public void GetFolderByName() { - if (this._skip) return; + kt_folder_detail response = this._kt.get_folder_detail_by_name(this._session, "/kt_unit_test"); Assert.AreEqual(0,response.status_code); - Assert.AreEqual(this._folder_id, response.id); + Assert.AreEqual(this._folder_id, response.id); response = this._kt.get_folder_detail_by_name(this._session, "kt_unit_test"); Assert.AreEqual(0,response.status_code); - Assert.AreEqual(this._folder_id, response.id); + Assert.AreEqual(this._folder_id, response.id); response = this._kt.get_folder_detail_by_name(this._session, "kt_unit_test/subfolder"); Assert.AreEqual(0,response.status_code); - Assert.AreEqual(this._subfolder_id,response.id); + Assert.AreEqual(this._subfolder_id,response.id); response = this._kt.get_folder_detail_by_name(this._session, "kt_unit_test/subfolder2"); Assert.IsFalse(response.status_code == 0); - + } - + [Test] - public void GetFolderContents() + public void GetFolderContents() { - if (this._skip) return; + kt_folder_contents response = this._kt.get_folder_contents(this._session, this._folder_id, 1, "DF"); Assert.AreEqual(0,response.status_code); Assert.AreEqual(this._folder_id,response.folder_id); @@ -98,45 +95,29 @@ namespace MonoTests.KnowledgeTree Assert.AreEqual("subfolder", response2.folder_name); Assert.AreEqual("Root Folder/kt_unit_test/subfolder", response2.full_path); } - + [Test] - public void RenameFolder() + public void RenameFolder() { - if (this._skip) return; + kt_response response = this._kt.rename_folder(this._session, this._subfolder_id, "subfolder2"); Assert.AreEqual(0, response.status_code); - + kt_folder_detail response2 = this._kt.get_folder_detail(this._session, this._subfolder_id); Assert.AreEqual(0, response2.status_code); Assert.AreEqual(this._subfolder_id, response2.id); Assert.AreEqual("subfolder2", response2.folder_name); Assert.AreEqual(this._folder_id, response2.parent_id); - Assert.AreEqual("Root Folder/kt_unit_test/subfolder2", response2.full_path); - } + Assert.AreEqual("Root Folder/kt_unit_test/subfolder2", response2.full_path); + } [Test] - public void CopyFolder() - { - if (this._skip) return; - // TODO copy - // - } - - [Test] - public void MoveFolder() + public void RemoveFolder() { - if (this._skip) return; - // TODO move - // - } - [Test] - public void RemoveFolder() - { - if (this._skip) return; kt_response response = this._kt.delete_folder(this._session, this._folder_id, "unit testing remove"); Assert.AreEqual(0, response.status_code); - } + } } } diff --git a/ktwebservice/nunit/helper.cs b/ktwebservice/nunit/helper.cs new file mode 100755 index 0000000..d66ece8 --- /dev/null +++ b/ktwebservice/nunit/helper.cs @@ -0,0 +1,400 @@ +using System; +using System.Text; +using System.Net; +using System.IO; + +namespace MonoTests.KnowledgeTree +{ + public class FileUploader + { + private String boundary; + private String uri; + private String filename; + + + public FileUploader(String uri) + { + this.uri = uri; + this.boundary = "----" + DateTime.Now.Ticks.ToString("x"); + } + + public String getFilename() + { + return this.filename; + } + + + public void upload(String sessionid, String filename) + { + String displayname = Path.GetFileName(filename); + StringBuilder header = new StringBuilder(); + + header.Append("--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"session_id\"\r\n\r\n" + sessionid + "\r\n"); + header.Append("--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"action\"\r\n\r\nA\r\n"); + header.Append("--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"output\"\r\n\r\nxml\r\n"); + + header.Append("--" + boundary + "\r\n"); + header.Append("Content-Disposition: form-data; name=\"name\";"); + header.Append("filename=\"" + displayname + "\"\r\nContent-Type: application/octet-stream\r\n\r\n"); + + + HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(this.uri); + webrequest.ContentType = "multipart/form-data; boundary=" + boundary; + webrequest.Method = "POST"; + + + byte[] headerArray = Encoding.UTF8.GetBytes(header.ToString()); + byte[] boundaryArray = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); + + FileStream file = new FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read); + + long filesize = file.Length; + webrequest.ContentLength = headerArray.Length + filesize + boundaryArray.Length; + + Stream requestStream = webrequest.GetRequestStream(); + requestStream.Write(headerArray, 0, headerArray.Length); + + byte[] buffer = new byte[10240]; + + int read = 0; + + while ((read = file.Read(buffer, 0, buffer.Length)) > 0) + { + + requestStream.Write(buffer, 0, read); + } + + requestStream.Write(boundaryArray, 0, boundaryArray.Length); + + + WebResponse response = webrequest.GetResponse(); + StreamReader sr = new StreamReader(response.GetResponseStream()); + String xml = sr.ReadToEnd(); + //System.Console.WriteLine("xml: " + xml); + + + + if (xml.IndexOf("0") != -1) + { + long tmp = this.tokenInt("filesize",xml); + if (tmp != filesize) + { + throw new Exception("Filesize should be " + filesize + " but appears to be "+ tmp); + } + + tmp = this.tokenInt("error",xml); + if (tmp > 0) + { + throw new Exception("The server reported error code " + tmp + " for the file upload"); + } + this.filename = this.tokenString("filename",xml); + // yay, all is good! + return; + } + + String msg = this.tokenString("msg", xml); + long error = this.tokenInt("error", xml); + if (error > 0) + { + throw new Exception("The server reported error code " + error + " for the file upload"); + } + + throw new Exception("Upload error: " + msg); + + } + + private String tokenString(String token, String xml) + { + int tokStart = xml.IndexOf("<"+token+">") + token.Length+2; + int tokEnd = xml.IndexOf(""); + if (tokEnd == -1) return ""; + + String value = xml.Substring(tokStart, tokEnd-tokStart); + //System.Console.WriteLine(token + ": " + value); + return value; + } + + private long tokenInt(String token, String xml) + { + String value = this.tokenString(token, xml); + if (value.Equals("")) + { + return -1; + } + return long.Parse(value); + } + + } + + public class Document + { + public String title; + public String filename; + public String content; + public int docId; + public String session; + public KnowledgeTreeService kt; + public long filesize; + public bool verbose; + public bool local; + + public Document(int offset, String session, KnowledgeTreeService kt, bool verbose, bool local) + { + this.title = "kt unit test" + offset; + this.filename = Helper.isUnix()?("/tmp/kt_unit_test" + offset + ".txt"):("c:\\kt_unit_test"+offset+".txt"); + this.content = "hello world!"; + this.docId = 0; + this.session = session; + this.kt = kt; + this.verbose =verbose; + this.local = local; + } + + public kt_document_detail createFile(int folderId) + { + Helper.writeFile(this.filename, this.content); + this.filesize = this.content.Length; + + if (this.local) + { + return null; + } + kt_document_detail d1 = this.kt.get_document_detail_by_title(this.session, folderId, this.title, ""); + if (d1.status_code == 1) + { + this.docId = d1.document_id; + this.deleteFile(); + } + + kt_document_detail response1 = this.kt.add_base64_document(this.session, folderId, this.title, this.filename, "Default", Helper.ConvertFileToBase64Encoding(this.filename)); + + if (response1.status_code == 0) + { + this.docId = response1.document_id; + } + + if (this.verbose) + { + if (response1.status_code == 0) + { + System.Console.WriteLine("docid: " + this.docId + " filename: " + this.filename); + } + else + { + System.Console.WriteLine("Could not create file: " + this.filename); + } + } + + return response1; + + } + + public kt_document_detail createFileWithMetadata(int folderId, kt_metadata_fieldset[] metadata, kt_sysdata_item[] sysdata) + { + Helper.writeFile(this.filename, this.content); + + this.filesize = this.content.Length; + + if (this.local) + { + return null; + } + + kt_document_detail d1 = this.kt.get_document_detail_by_title(this.session, folderId, this.title, ""); + if (d1.status_code == 1) + { + this.docId = d1.document_id; + this.deleteFile(); + } + + kt_document_detail response1 = this.kt.add_base64_document_with_metadata(this.session, folderId, this.title, this.filename, "Default", Helper.ConvertFileToBase64Encoding(this.filename), metadata, sysdata); + + if (response1.status_code == 0) + { + this.docId = response1.document_id; + } + + if (this.verbose) + { + if (response1.status_code == 0) + { + System.Console.WriteLine("docid: " + this.docId + " filename: " + this.filename); + } + else + { + System.Console.WriteLine("Could not create file: " + this.filename); + } + } + + return response1; + } + + public kt_document_detail checkinFileWithMetadata(int folderId, kt_metadata_fieldset[] metadata, kt_sysdata_item[] sysdata) + { + Helper.writeFile(this.filename, this.content); + this.filesize = this.content.Length; + + if (this.local) + { + return null; + } + + kt_document_detail d1 = this.kt.get_document_detail_by_title(this.session, folderId, this.title, ""); + if (d1.status_code == 1) + { + this.docId = d1.document_id; + this.deleteFile(); + } + + kt_document_detail response1 = this.kt.checkin_base64_document_with_metadata(this.session, this.docId, this.filename, "checkin reason", Helper.ConvertFileToBase64Encoding(this.filename), false, metadata, sysdata); + + if (response1.status_code == 0) + { + this.docId = response1.document_id; + } + + if (this.verbose) + { + if (response1.status_code == 0) + { + System.Console.WriteLine("docid: " + this.docId + " filename: " + this.filename); + } + else + { + System.Console.WriteLine("Could not create file: " + this.filename); + } + } + + return response1; + } + + + + public void deleteFile() + { + Helper.deleteFile(this.filename); + + if (this.local) + { + return; + } + + if (this.docId > 0) + { + + kt_response response = this.kt.delete_document(this.session, this.docId, "Delete - cleaning up"); + if (this.verbose && response.status_code != 0) + { + System.Console.WriteLine("Could not delete file: " + this.filename); + } + } + } + } + + + public class Helper + { + public static bool isUnix() + { + // found reference on: http://www.mono-project.com/FAQ:_Technical + int platform = (int) Environment.OSVersion.Platform; + return (platform == 4) || (platform == 128); + } + + public static void writeFile(String filename, String text) + { + try + { + TextWriter tw = new StreamWriter(filename); + tw.WriteLine(text ); + tw.Close(); + } + catch (System.Exception exp) + { + System.Console.WriteLine("{0}", exp.Message); + throw; + } + } + + public static String readFile(String filename) + { + String text = null; + try + { + FileStream inFile = new FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read); + StreamReader sr = new StreamReader(inFile); + text = sr.ReadToEnd(); + inFile.Close(); + } + catch (System.Exception exp) + { + System.Console.WriteLine("{0}", exp.Message); + throw; + } + + return text; + } + + public static void deleteFile(string filename) + { + try + { + File.Delete(filename); + } + catch(System.Exception) + { + // we are using this to cleanup, so don't handle + } + } + + public static string ConvertFileToBase64Encoding(string filename) + { + System.IO.FileStream inFile; + + byte[] binaryData; + string base64String = ""; + + try + { + inFile = new System.IO.FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read); + binaryData = new Byte[inFile.Length]; + inFile.Read(binaryData, 0, (int)inFile.Length); + inFile.Close(); + + base64String = System.Convert.ToBase64String(binaryData, 0, binaryData.Length); + } + catch (System.Exception exp) + { + System.Console.WriteLine("{0}", exp.Message); + throw; + } + + return base64String; + } + + public static long ConvertBase64EncodingToFile(String encoding, string filename) + { + System.IO.FileStream inFile; + + byte[] binaryData; + string base64String = ""; + + try + { + binaryData = Convert.FromBase64String (encoding); + + inFile = new System.IO.FileStream(filename, System.IO.FileMode.Create); + + inFile.Write(binaryData, 0, (int)binaryData.Length); + inFile.Close(); + } + catch (System.Exception exp) + { + System.Console.WriteLine("{0}", exp.Message); + throw; + } + return binaryData.Length; + } + + } +} diff --git a/ktwebservice/nunit/inventory.txt b/ktwebservice/nunit/inventory.txt new file mode 100644 index 0000000..15501b2 --- /dev/null +++ b/ktwebservice/nunit/inventory.txt @@ -0,0 +1,86 @@ +authentication.cs +================= +*login +*logout + +document_add.cs +=============== + +*add_base64_document +*delete_document +*delete_folder +*get_document_detail_by_name +*get_folder_detail_by_name + +document_checkout.cs +==================== + +*checkin_base64_document +*checkout_base64_document +*undo_document_checkout + +document_detail.cs +================== + +*get_document_detail +*get_document_detail_by_name + +document_links.cs +================= + +*get_document_links +*link_documents +*unlink_documents + +document_owner.cs +================= + +*change_document_owner + + +document_type.cs +================ + +*change_document_type + +document_history.cs +=================== + +*get_document_version_history +*get_document_transaction_history + +document_rename.cs +================== + +*rename_document_filename +*rename_document_title + +document_workflow.cs +==================== + +*start_document_workflow +*stop_document_workflow +*perform_document_workflow_transition +*get_document_workflow_transitions + +document_metadata.cs +==================== + +*get_document_types +*get_document_type_metadata +*get_document_metadata +*update_document_metadata + +folder.cs +========= + +*get_folder_detail +*create_folder +*get_folder_detail_by_name +*get_folder_contents +*delete_folder + +document_system_metadata.cs +=========================== + +*update_document_metadata diff --git a/ktwebservice/nunit/makefile b/ktwebservice/nunit/makefile index 859cdd4..1af3df6 100644 --- a/ktwebservice/nunit/makefile +++ b/ktwebservice/nunit/makefile @@ -1,14 +1,15 @@ -RESULTS=authentication.result folder.result document.result query.result +RESULTS=authentication.result document_detail.result document_links.result document_owner.result document_type.result document_history.result document_rename.result document_workflow.result document_metadata.result folder.result document_add.result document_system_metadata.result document_checkout.result +#document_download.result PROXY=KTproxy.cs WSDL=ktdms.wsdl WSDL_URL=http://ktdms.trunk/ktwebservice/index.php?wsdl all: ${RESULTS} - + results: clean-results ${RESULTS} - -KTproxy.dll: KTproxy.cs - mcs -r:System.Web.Services /target:library KTproxy.cs + +KTproxy.dll: KTproxy.cs helper.cs + mcs -r:System.Web.Services /target:library KTproxy.cs helper.cs KTproxy.cs: ktdms.wsdl wsdl -out:${PROXY} ${WSDL} @@ -23,7 +24,7 @@ clean-results: rm -f ${RESULTS} %.dll: %.cs KTproxy.dll - mcs -r:System.Web.Services -r:nunit.framework /r:KTproxy.dll -debug /target:library -out:$@ $< + mcs -r:System.Web.Services -r:nunit.framework /r:KTproxy.dll -debug /target:library -out:$@ $< %.result: %.dll nunit-console $< diff --git a/ktwebservice/nunit/query.cs b/ktwebservice/nunit/query.cs index 735bcec..c3ee009 100644 --- a/ktwebservice/nunit/query.cs +++ b/ktwebservice/nunit/query.cs @@ -3,45 +3,45 @@ using System; using System.IO; namespace MonoTests.KnowledgeTree -{ +{ [TestFixture] public class QueryTest { - + private String _session; private KnowledgeTreeService _kt; - + [SetUp] - public void SetUp() + public void SetUp() { - this._kt = new KnowledgeTreeService(); - kt_response response = this._kt.login("admin","admin","127.0.0.1"); - this._session = response.message; - + this._kt = new KnowledgeTreeService(); + kt_response response = this._kt.login("admin","admin","127.0.0.1"); + this._session = response.message; + } [TearDown] - public void TearDown() + public void TearDown() { this._kt.logout(this._session); } - + [Test] - public void Query() + public void Query() { - kt_search_response response = this._kt.search(this._session, "Filesize >= \"0\"", ""); - - Assert.AreEqual(0,response.status_code); - - + kt_search_response response = this._kt.search(this._session, "Filesize >= \"0\"", ""); + + Assert.AreEqual(0,response.status_code); + + if (response.status_code == 0) { - + for(int i=0;i