Beispiel #1
0
        public void LoggedInUserCanSubmitGetAndDeleteJsonData()
        {
            var    testObject = new UnitTestDataObject1();
            var    json       = JsonConvert.SerializeObject(testObject);
            var    dataType   = testObject.GetType().Name;
            string objectId   = null;

            Assert.That(() => objectId = analystDataApiClient.InsertAsync(dataType, json).Result, Throws.Nothing);
            Assert.That(objectId, Is.Not.Null);
            bool?objectExists = null;

            AssertStatusCode(
                () => objectExists = analystDataApiClient.ExistsAsync <UnitTestDataObject1>(objectId).Result,
                HttpStatusCode.OK);
            Assert.That(objectExists, Is.True);
            string retreivedObjectJson = null;

            Assert.That(() => retreivedObjectJson = analystDataApiClient.GetAsync(dataType, objectId).Result, Throws.Nothing);
            var retreivedObject = JsonConvert.DeserializeObject <UnitTestDataObject1>(retreivedObjectJson);

            Assert.That(retreivedObject.Id, Is.EqualTo(testObject.Id));
            Assert.That(() => analystDataApiClient.DeleteAsync(dataType, objectId).Wait(), Throws.Nothing);
            objectExists = null;
            AssertStatusCode(
                () => objectExists = analystDataApiClient.ExistsAsync(dataType, objectId).Result,
                HttpStatusCode.OK);
            Assert.That(objectExists, Is.False);
        }
Beispiel #2
0
        public void LoggedInUserCanSubmitGetAndDeleteOwnData()
        {
            var    testObject = new UnitTestDataObject1();
            string objectId   = null;

            Assert.That(() => objectId = analystDataApiClient.InsertAsync(testObject).Result, Throws.Nothing);
            Assert.That(objectId, Is.Not.Null);
            bool?objectExists = null;

            AssertStatusCode(
                () => objectExists = analystDataApiClient.ExistsAsync <UnitTestDataObject1>(objectId).Result,
                HttpStatusCode.OK);
            Assert.That(objectExists, Is.True);
            UnitTestDataObject1 retreivedObject = null;

            Assert.That(() => retreivedObject = analystDataApiClient.GetAsync <UnitTestDataObject1>(objectId).Result, Throws.Nothing);
            Assert.That(retreivedObject.Id, Is.EqualTo(testObject.Id));
            Assert.That(retreivedObject.Timestamp, Is.EqualTo(testObject.Timestamp));
            Assert.That(() => analystDataApiClient.DeleteAsync <UnitTestDataObject1>(objectId).Wait(), Throws.Nothing);
            objectExists = null;
            AssertStatusCode(
                () => objectExists = analystDataApiClient.ExistsAsync <UnitTestDataObject1>(objectId).Result,
                HttpStatusCode.OK);
            Assert.That(objectExists, Is.False);
        }
Beispiel #3
0
        public void ViewerCanGetAndSearchData()
        {
            UserGenerator.RegisterAndLoginUserWithRole(Role.Viewer, adminDataApiClient, out var viewerDataApiClient);

            var testObject = new UnitTestDataObject1();
            var objectId   = analystDataApiClient.InsertAsync(testObject).Result;

            try
            {
                UnitTestDataObject1 retreivedObject = null;
                AssertStatusCode(
                    () => retreivedObject = viewerDataApiClient.GetAsync <UnitTestDataObject1>(objectId).Result,
                    HttpStatusCode.OK, "Get");
                Assert.That(retreivedObject.Id, Is.EqualTo(testObject.Id));

                var query = $"SELECT * FROM {nameof(UnitTestDataObject1)}";
                AssertStatusCode(
                    () => viewerDataApiClient.SearchAsync(query, ResultFormat.Json).Wait(),
                    HttpStatusCode.OK, "Search");
            }
            finally
            {
                analystDataApiClient.DeleteAsync <UnitTestDataObject1>(objectId).Wait();
                UserGenerator.DeleteUser(viewerDataApiClient);
            }
        }
Beispiel #4
0
        public void InvalidIdIsRejected(string id)
        {
            var testObject = new UnitTestDataObject1
            {
                Id = id
            };

            AssertStatusCode(
                () => analystDataApiClient.InsertAsync(testObject, testObject.Id).Wait(),
                HttpStatusCode.BadRequest);
        }
Beispiel #5
0
        public void SubmitRejectsDataWithInvalidAccessToken()
        {
            var noLoginDataApiClient = new DataApiClient(ApiSetup.ApiConfiguration)
            {
                LoginMethod = LoginMethod.JsonWebToken
            };
            var testObject = new UnitTestDataObject1();

            AssertStatusCode(
                () => noLoginDataApiClient.InsertAsync(testObject).Wait(),
                HttpStatusCode.Unauthorized);
        }
Beispiel #6
0
        public void DeleteManyDeletesExpectedItems()
        {
            UserGenerator.RegisterAndLoginUserWithRole(Role.DataProducer, adminDataApiClient, out var otherUserDataApiClient);

            var testObject1 = new UnitTestDataObject1 {
                Id = "DeleteManyTest_DeleteMe_1"
            };
            var testObject2 = new UnitTestDataObject1 {
                Id = "DeleteManyTest_DeleteMe_2"
            };
            var testObject3 = new UnitTestDataObject1 {
                Id = "DeleteManyTest_DoNotDelete"
            };
            var testObject4 = new UnitTestDataObject1 {
                Id = "DeleteManyTest_DeleteMe_Otheruser"
            };

            analystDataApiClient.ReplaceAsync(testObject1, testObject1.Id);
            analystDataApiClient.ReplaceAsync(testObject2, testObject2.Id);
            analystDataApiClient.ReplaceAsync(testObject3, testObject3.Id);
            otherUserDataApiClient.ReplaceAsync(testObject4, testObject4.Id);

            Task.Delay(500).Wait(); // Work-around for test objects occasionaly not being available when query below is executed
            try
            {
                List <DeleteResult> deleteResults = null;
                AssertStatusCode(
                    () => deleteResults = analystDataApiClient.DeleteMany <UnitTestDataObject1>("Data.Id LIKE '%DeleteMe%'").Result,
                    HttpStatusCode.OK);
                Assert.That(deleteResults.Count, Is.EqualTo(3));
                Assert.That(deleteResults, Has.Exactly(2).Matches <DeleteResult>(x => x.IsDeleted));
                Assert.That(deleteResults, Has.Exactly(1).Matches <DeleteResult>(x => !x.IsDeleted));
                Assert.That(analystDataApiClient.ExistsAsync <UnitTestDataObject1>(testObject1.Id).Result, Is.False);
                Assert.That(analystDataApiClient.ExistsAsync <UnitTestDataObject1>(testObject2.Id).Result, Is.False);
                Assert.That(analystDataApiClient.ExistsAsync <UnitTestDataObject1>(testObject3.Id).Result, Is.True);
                Assert.That(analystDataApiClient.ExistsAsync <UnitTestDataObject1>(testObject4.Id).Result, Is.True);
            }
            finally
            {
                analystDataApiClient.DeleteAsync <UnitTestDataObject1>(testObject1.Id);
                analystDataApiClient.DeleteAsync <UnitTestDataObject1>(testObject2.Id);
                analystDataApiClient.DeleteAsync <UnitTestDataObject1>(testObject3.Id);
                otherUserDataApiClient.DeleteAsync <UnitTestDataObject1>(testObject4.Id);
                UserGenerator.DeleteUser(otherUserDataApiClient);
            }
        }
Beispiel #7
0
        public void DataFromOtherUserCanBeOverwrittenAndDeletedIfEnabled()
        {
            UserGenerator.RegisterAndLoginUserWithRole(Role.Analyst, adminDataApiClient, out var analyst2DataApiClient);

            var    testObject = new UnitTestDataObject1();
            string objectId   = null;

            Assert.That(() => objectId = analystDataApiClient.InsertAsync(testObject).Result, Throws.Nothing);
            Assert.That(objectId, Is.Not.Null);

            // Enable overwriting of data
            adminDataApiClient.SetCollectionOptions(
                new CollectionOptions(nameof(UnitTestDataObject1))
            {
                NonAdminUsersCanOverwriteData = true
            });

            try
            {
                // Test 1: Delete
                // NOTE: Order of tests is important, because overwriting data
                // results in taking ownership of the object
                // and then be able to delete it, but we also want to
                // test that we can delete even if the object isn't ours.
                AssertStatusCode(
                    () => analyst2DataApiClient.DeleteAsync <UnitTestDataObject1>(objectId).Wait(),
                    HttpStatusCode.OK, "Delete");

                // Test 2: Overwrite
                AssertStatusCode(
                    () => analyst2DataApiClient.ReplaceAsync(new UnitTestDataObject1(), objectId).Wait(),
                    HttpStatusCode.OK, "Replace");
            }
            finally
            {
                UserGenerator.DeleteUser(analyst2DataApiClient);
                analystDataApiClient.DeleteAsync <UnitTestDataObject1>(objectId).Wait();
                adminDataApiClient.SetCollectionOptions(
                    new CollectionOptions(nameof(UnitTestDataObject1))
                {
                    NonAdminUsersCanOverwriteData = false
                });
            }
        }
Beispiel #8
0
        public void OtherUserCannotSubmitObjectWithSameId()
        {
            UserGenerator.RegisterAndLoginUserWithRole(Role.Analyst, adminDataApiClient, out var dataProducerApiClient);

            var    dataType = nameof(UnitTestDataObject1);
            string id       = null;

            AssertStatusCode(
                () => id = dataProducerApiClient.GetNewIdAsync(dataType).Result,
                HttpStatusCode.OK);
            Assert.That(id, Is.Not.Null);
            var testObject = new UnitTestDataObject1 {
                Id = id
            };

            AssertStatusCode(
                () => analystDataApiClient.InsertAsync(testObject, id).Wait(),
                HttpStatusCode.Conflict);
            dataProducerApiClient.DeleteAsync <UnitTestDataObject1>(id);
        }
Beispiel #9
0
        public void DataFromOtherUserCannotBeOverwrittenNorDeleted()
        {
            UserGenerator.RegisterAndLoginUserWithRole(Role.Analyst, adminDataApiClient, out var analyst2DataApiClient);

            // Make sure overwriting is disabled
            adminDataApiClient.SetCollectionOptions(
                new CollectionOptions(nameof(UnitTestDataObject1))
            {
                NonAdminUsersCanOverwriteData = false
            });

            var    testObject = new UnitTestDataObject1();
            string objectId   = null;

            Assert.That(() => objectId = analystDataApiClient.InsertAsync(testObject).Result, Throws.Nothing);
            Assert.That(objectId, Is.Not.Null);

            try
            {
                // Test 1: Overwrite
                var otherTestObject = new UnitTestDataObject1 {
                    Id = objectId
                };
                AssertStatusCode(
                    () => analyst2DataApiClient.ReplaceAsync(otherTestObject, otherTestObject.Id).Wait(),
                    HttpStatusCode.Unauthorized);

                // Test 2: Delete
                AssertStatusCode(
                    () => analyst2DataApiClient.DeleteAsync <UnitTestDataObject1>(objectId).Wait(),
                    HttpStatusCode.Unauthorized);
                AssertStatusCode(
                    () => analystDataApiClient.DeleteAsync <UnitTestDataObject1>(objectId).Wait(),
                    HttpStatusCode.OK);
            }
            finally
            {
                UserGenerator.DeleteUser(analyst2DataApiClient);
            }
        }