New() public method

Create a new collection within the specified project.
public New ( string projectId, string name, string key = null, string description = null ) : Task
projectId string Project id that the collection will be created for.
name string New collection's name.
key string New collection's key.
description string New collection's description.
return Task
 public async Task New_WithInvalidProjectId_ThrowsException(CollectionSyncanoClient client)
 {
     try
     {
         //when
         await client.New("abcde", "New collection name");
         throw new Exception("New should throw an exception");
     }
     catch (Exception e)
     {
         //then
         e.ShouldBeType<SyncanoException>();
     }
 }
 public async Task New_WithNullProjectId_ThrowsException(CollectionSyncanoClient client)
 {
     try
     {
         //when
         await client.New(null, "New collection name");
         throw new Exception("New should throw an exception");
     }
     catch (Exception e)
     {
         //then
         e.ShouldBeType<ArgumentNullException>();
     }
 }
        public async Task New_WithoutKeyAndDescription_CreatesNewCollectionObject(CollectionSyncanoClient client)
        {
            //given
            string collectionName = "NewCollection test " + DateTime.Now.ToLongTimeString() + " " +
                                    DateTime.Now.ToShortDateString();

            //when
            var collection =
                await client.New(TestData.ProjectId, collectionName);

            //then
            collection.ShouldNotBeNull();
            collection.Status.ShouldEqual(CollectionStatus.Inactive);
            collection.Key.ShouldBeNull();
            collection.Description.ShouldBeNull();

            //cleanup
            await client.Delete(TestData.ProjectId, collection.Id);
        }
        public async Task Authorize_ByCollectionKey(CollectionSyncanoClient client)
        {
            //given
            string collectionName = "NewCollection test " + DateTime.Now.ToLongTimeString() + " " +
                                    DateTime.Now.ToShortDateString();
            string collectionKey = "qwert";

            var collection =
                await client.New(TestData.ProjectId, collectionName, collectionKey);
            await client.Activate(TestData.ProjectId, collection.Id, true);

            //when
            var result =
                await
                    client.Authorize(TestData.UserApiClientId, Permissions.UpdateOwnData,
                        TestData.ProjectId, collectionKey: collectionKey);

            //then
            result.ShouldBeTrue();

            //cleanup
            await client.Deauthorize(TestData.UserApiClientId, Permissions.UpdateOwnData,
                        TestData.ProjectId, collection.Id);
            await client.Delete(TestData.ProjectId, collection.Id);
        }
        public async Task Update_ByCollectionId_WithoutNameAndDescription(CollectionSyncanoClient client)
        {
            //given
            string collectionName = "NewCollection test " + DateTime.Now.ToLongTimeString() + " " +
                                    DateTime.Now.ToShortDateString();
            string collectionKey = "qwert";

            var collection =
                await client.New(TestData.ProjectId, collectionName, collectionKey);

            //when
            collection =
                await
                    client.Update(TestData.ProjectId, collection.Id);

            //then
            collection.ShouldNotBeNull();
            collection.Key.ShouldEqual(collectionKey);

            //cleanup
            await client.Delete(TestData.ProjectId, collection.Id);
        }
        public async Task Update_ByCollectionId_NewCollectionKey(CollectionSyncanoClient client)
        {
            //given
            string collectionName = "NewCollection test " + DateTime.Now.ToLongTimeString() + " " +
                                    DateTime.Now.ToShortDateString();
            string collectionKey = "qwert";
            string collectionDescription = "abcde";
            string newCollectionName = "New name " + collectionName;
            string newKey = "newKey value";

            var collection =
                await client.New(TestData.ProjectId, collectionName, collectionKey);
            await client.Activate(TestData.ProjectId, collection.Id, true);

            //when
            collection =
                await
                    client.Update(TestData.ProjectId, collection.Id, collectionKey: newKey, name: newCollectionName,
                        description: collectionDescription);

            //then
            collection.ShouldNotBeNull();
            collection.Key.ShouldEqual(newKey);
            collection.Name.ShouldEqual(newCollectionName);
            collection.Description.ShouldEqual(collectionDescription);

            //cleanup
            await client.Delete(TestData.ProjectId, collectionKey: collection.Key);
        }
        public async Task Deactivate_ByCollectionId(CollectionSyncanoClient client)
        {
            //given
            string collectionName = "NewCollection test " + DateTime.Now.ToLongTimeString() + " " +
                                    DateTime.Now.ToShortDateString();
            string collectionKey = "qwert";

            var collection =
                await client.New(TestData.ProjectId, collectionName, collectionKey);
            await client.Activate(TestData.ProjectId, collection.Id, true);

            //when
            var result = await client.Deactivate(TestData.ProjectId, collection.Id);

            //then
            result.ShouldBeTrue();

            //cleanup
            await client.Delete(TestData.ProjectId, collection.Id);
        }
        public async Task GetOne_ByCollectionKey_GetsCollectionObject(CollectionSyncanoClient client)
        {
            //given
            string collectionName = "NewCollection test " + DateTime.Now.ToLongTimeString() + " " +
                                    DateTime.Now.ToShortDateString();
            string collectionKey = "abcde";

            var collection =
                await client.New(TestData.ProjectId, collectionName, collectionKey);
            await client.Activate(TestData.ProjectId, collection.Id, true);

            //then
            var result = await client.GetOne(TestData.ProjectId, collectionKey: collectionKey);

            //then
            result.ShouldNotBeNull();
            result.Status.ShouldEqual(CollectionStatus.Active);
            result.Key.ShouldEqual(collectionKey);
            result.Description.ShouldBeNull();

            //cleanup
            await client.Delete(TestData.ProjectId, collection.Id);
        }
        public async Task Get_MultipleTagVersion_WithTagsAndTag(CollectionSyncanoClient client)
        {
            //given
            var tags = new List<string> { "abc", "def", "ghi", "jkl" };
            var collection = await client.New(TestData.ProjectId, "Get test");
            var tagRequest = new ManageCollactionTagsRequest();
            tagRequest.ProjectId = TestData.ProjectId;
            tagRequest.Tags = tags;
            tagRequest.CollectionId = collection.Id;
            await client.AddTag(tagRequest);
            var request = new GetCollectionRequest();
            request.ProjectId = TestData.ProjectId;
            request.Tags = new List<string> {tags[0], tags[1], tags[2]};
            request.Tag = tags[3];
            request.Status = CollectionStatus.Inactive;

            //when
            var result = await client.Get(request);

            //then
            result.ShouldNotBeEmpty();

            //cleanup
            await client.Delete(TestData.ProjectId, collection.Id);
        }
        public async Task Get_MultipleTagVersion_WithEmptyTags(CollectionSyncanoClient client)
        {
            //given
            //given
            var tags = new List<string>();
            var collection = await client.New(TestData.ProjectId, "Get test");
            var request = new GetCollectionRequest();
            request.ProjectId = TestData.ProjectId;
            request.Tags = tags;
            
            //when
            var result = await client.Get(request);
            
            //then
            result.ShouldNotBeEmpty();
            result.Any(c => c.Id == collection.Id).ShouldBeTrue();

            //cleanup
            await client.Delete(TestData.ProjectId, collection.Id);

        }
        public async Task DeleteTag_MultipleTagVersion_ByCollectionKey_WithWeightAndRemoveOther(CollectionSyncanoClient client)
        {
            //given
            string collectionName = "NewCollection test " + DateTime.Now.ToLongTimeString() + " " +
                                    DateTime.Now.ToShortDateString();
            const string collectionKey = "qwert";
            var tags = new[] { "abc", "def", "ghi" };

            var collection =
                await client.New(TestData.ProjectId, collectionName, collectionKey);
            await client.Activate(TestData.ProjectId, collection.Id, true);

            var tagRequest = new ManageCollactionTagsRequest();
            tagRequest.ProjectId = TestData.ProjectId;
            tagRequest.Tags = new List<string>(tags);
            tagRequest.CollectionKey = collectionKey;

            await client.AddTag(tagRequest, 10.84, true);

            //when
            var result = await client.DeleteTag(tagRequest);
            var request = new GetCollectionRequest();
            request.ProjectId = TestData.ProjectId;
            request.Tag = tags[0];
            var array = await client.Get(request);

            //then
            result.ShouldBeTrue();
            array.ShouldBeEmpty();

            //cleanup
            await client.Delete(TestData.ProjectId, collection.Id);
        }
        public async Task DeleteTag_SingleTagVersion_ByCollectionKey_WithWeightAndRemoveOther(CollectionSyncanoClient client)
        {
            //given
            string collectionName = "NewCollection test " + DateTime.Now.ToLongTimeString() + " " +
                                    DateTime.Now.ToShortDateString();
            string collectionKey = "qwert";
            string tag = "abcde";

            var collection =
                await client.New(TestData.ProjectId, collectionName, collectionKey);
            await client.Activate(TestData.ProjectId, collection.Id);

            var request = new ManageCollactionTagsRequest();
            request.ProjectId = TestData.ProjectId;
            request.Tag = tag;
            request.CollectionKey = collectionKey;

            await client.AddTag(request, 3.5, true);

            //when
            var result = await client.DeleteTag(request);

            //then
            result.ShouldBeTrue();

            //cleanup
            await client.Delete(TestData.ProjectId, collection.Id);
        }
        public async Task AddTag_RemoveOtherTest(CollectionSyncanoClient client)
        {
            //given
            string collectionName = "NewCollection test " + DateTime.Now.ToLongTimeString() + " " +
                                    DateTime.Now.ToShortDateString();
            const string collectionKey = "qwert";
            var tags = new[] { "abc", "def", "ghi" };
            var tag = "jkl";

            var collection =
                await client.New(TestData.ProjectId, collectionName, collectionKey);

            var tagRequest = new ManageCollactionTagsRequest();
            tagRequest.ProjectId = TestData.ProjectId;
            tagRequest.CollectionId = collection.Id;
            tagRequest.Tag = tag;
            await client.AddTag(tagRequest);

            tagRequest.Tags = new List<string>(tags);
            tagRequest.Tag = null;

            //when
            var result = await client.AddTag(tagRequest, 10.84, true);
            var request = new GetCollectionRequest();
            request.ProjectId = TestData.ProjectId;
            request.Tags = new List<string>(tags);
            var array = await client.Get(request);

            //then
            result.ShouldBeTrue();
            array.ShouldNotBeEmpty();
            array.Any(c => c.Tags.Count == tags.Length).ShouldBeTrue();

            //cleanup
            await client.Delete(TestData.ProjectId, collection.Id);
        }
        public async Task Get_OneTagVersion_WithTagAndStatus(CollectionSyncanoClient client)
        {
            //given
            string tag = "qwert";
            var collection = await client.New(TestData.ProjectId, "Get test");
            var tagRequest = new ManageCollactionTagsRequest();
            tagRequest.ProjectId = TestData.ProjectId;
            tagRequest.Tag = tag;
            tagRequest.CollectionId = collection.Id;
            await client.AddTag(tagRequest);
            var request = new GetCollectionRequest();
            request.ProjectId = TestData.ProjectId;
            request.Tag = tag;
            request.Status = CollectionStatus.Inactive;

            //when
            var result = await client.Get(request);

            //then
            result.ShouldNotBeEmpty();

            //cleanup
            await client.Delete(TestData.ProjectId, collection.Id);
        }
        public async Task Get_NoTagVersion_WithInctiveStatus(CollectionSyncanoClient client)
        {
            //given
            var collection = await client.New(TestData.ProjectId, "Get test");
            var request = new GetCollectionRequest();
            request.ProjectId = TestData.ProjectId;
            request.Status = CollectionStatus.Inactive;

            //when
            var result = await client.Get(request);

            //then
            result.ShouldNotBeEmpty();
            result.Any(c => c.Id == collection.Id).ShouldBeTrue();

            //cleanup
            await client.Delete(TestData.ProjectId, collection.Id);
        }