This commit is contained in:
2018-12-06 17:46:06 +00:00
parent b6d799e5c0
commit 8e6ddbd943
5 changed files with 3 additions and 704 deletions

View File

@@ -20,10 +20,10 @@ namespace AyaNova.Util
/////////// CHANGE THIS ON NEW SCHEMA UPDATE ////////////////////
//!!!!WARNING: BE SURE TO UPDATE THE DbUtil::PrepareDatabaseForSeeding WHEN NEW TABLES ADDED!!!!
private const int DESIRED_SCHEMA_LEVEL = 9;
private const int DESIRED_SCHEMA_LEVEL = 8;
internal const long EXPECTED_COLUMN_COUNT = 108;
internal const long EXPECTED_INDEX_COUNT = 25;
internal const long EXPECTED_COLUMN_COUNT = 93;
internal const long EXPECTED_INDEX_COUNT = 20;
//!!!!WARNING: BE SURE TO UPDATE THE DbUtil::PrepareDatabaseForSeeding WHEN NEW TABLES ADDED!!!!

View File

@@ -1,106 +0,0 @@
using System;
using Xunit;
using Newtonsoft.Json.Linq;
using FluentAssertions;
using System.Collections.Generic;
using System.Collections.Concurrent;
namespace raven_integration
{
public class TagCrud
{
/// <summary>
/// Test all CRUD routes for a widget
/// </summary>
[Fact]
public async void CRUD()
{
/*
{
"name": "TestTag"
}
*/
//CREATE
dynamic w1 = new JObject();
w1.name = Util.Uniquify("TeStTaG");
ApiResponse a = await Util.PostAsync("Tag", await Util.GetTokenAsync("BizAdminFull"), w1.ToString());
Util.ValidateDataReturnResponseOk(a);
long tagId = a.ObjectResponse["data"]["id"].Value<long>();
string tagName = a.ObjectResponse["data"]["name"].Value<string>();
tagName.Should().StartWith("testtag");
//RETRIEVE
/*
{
"data": {
"id": 24,
"created": "2018-03-28T21:07:41.9703503Z",
"concurrencyToken": 9502,
"ownerId": 1,
"name": "یونی‌کُد چیست؟"
}
}
*/
//Get one
a = await Util.GetAsync("Tag/" + tagId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateDataReturnResponseOk(a);
a.ObjectResponse["data"]["name"].Value<string>().Should().StartWith("testtag");
//UPDATE
//PUT
w1.Id = tagId;
w1.name = Util.Uniquify("PutTestTag");
w1.created = DateTime.UtcNow.ToString("s", System.Globalization.CultureInfo.InvariantCulture);
w1.concurrencyToken = a.ObjectResponse["data"]["concurrencyToken"].Value<uint>();
w1.OwnerId = 1L;
ApiResponse PUTTestResponse = await Util.PutAsync("Tag/" + tagId.ToString(), await Util.GetTokenAsync("BizAdminFull"), w1.ToString());
Util.ValidateHTTPStatusCode(PUTTestResponse, 200);
//check PUT worked
ApiResponse checkPUTWorked = await Util.GetAsync("Tag/" + tagId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateNoErrorInResponse(checkPUTWorked);
checkPUTWorked.ObjectResponse["data"]["name"].Value<string>().Should().Be(w1.name.ToString().ToLowerInvariant().Replace(" ", "-"));
uint concurrencyToken = PUTTestResponse.ObjectResponse["data"]["concurrencyToken"].Value<uint>();
//PATCH
var newName = Util.Uniquify("PatchUpdate");
string patchJson = "[{\"value\": \"" + newName + "\",\"path\": \"/name\",\"op\": \"replace\"}]";
ApiResponse PATCHTestResponse = await Util.PatchAsync("Tag/" + tagId.ToString() + "/" + concurrencyToken.ToString(), await Util.GetTokenAsync("BizAdminFull"), patchJson);
Util.ValidateHTTPStatusCode(PATCHTestResponse, 200);
//check PATCH worked
ApiResponse checkPATCHWorked = await Util.GetAsync("Tag/" + tagId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateNoErrorInResponse(checkPATCHWorked);
checkPATCHWorked.ObjectResponse["data"]["name"].Value<string>().Should().Be(newName.ToLowerInvariant().Replace(" ", "-"));
// //DELETE
ApiResponse DELETETestResponse = await Util.DeleteAsync("Tag/" + tagId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateHTTPStatusCode(DELETETestResponse, 204);
}
//==================================================
}//eoc
}//eons

View File

@@ -1,138 +0,0 @@
using System;
using Xunit;
using Newtonsoft.Json.Linq;
using FluentAssertions;
using System.Collections.Generic;
using System.Collections.Concurrent;
namespace raven_integration
{
public class TagGroupOps
{
/// <summary>
/// Test TagGroup operations
/// </summary>
[Fact]
public async void GroupOpsShouldWork()
{
//CREATE TAG1
dynamic D = new JObject();
D.name = Util.Uniquify("test-tag1-4-tag-group");
ApiResponse R = await Util.PostAsync("Tag", await Util.GetTokenAsync("BizAdminFull"), D.ToString());
Util.ValidateDataReturnResponseOk(R);
long TestTag1Id = R.ObjectResponse["data"]["id"].Value<long>();
//CREATE TAG2
D.name = Util.Uniquify("test-tag2-4-tag-group");
R = await Util.PostAsync("Tag", await Util.GetTokenAsync("BizAdminFull"), D.ToString());
Util.ValidateDataReturnResponseOk(R);
long TestTag2Id = R.ObjectResponse["data"]["id"].Value<long>();
//CREATE TAG-GROUP
D = new JObject();
D.name = Util.Uniquify("test-tag-group-for-ops");
R = await Util.PostAsync("TagGroup", await Util.GetTokenAsync("BizAdminFull"), D.ToString());
Util.ValidateDataReturnResponseOk(R);
long TestTagGroupId = R.ObjectResponse["data"]["id"].Value<long>();
//ADD TEST TAGS TO GROUP
D = new JObject();
D.tagId = TestTag1Id;
D.tagGroupId = TestTagGroupId;
R = await Util.PostAsync("TagGroupMap", await Util.GetTokenAsync("BizAdminFull"), D.ToString());
Util.ValidateDataReturnResponseOk(R);
D.tagId = TestTag2Id;
D.tagGroupId = TestTagGroupId;
R = await Util.PostAsync("TagGroupMap", await Util.GetTokenAsync("BizAdminFull"), D.ToString());
Util.ValidateDataReturnResponseOk(R);
//GET PICKLIST OF TAGS FOR GROUP
R = await Util.GetAsync("TagGroup/TagsInGroupPickList/" + TestTagGroupId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateDataReturnResponseOk(R);
//VERIFY CANT DELETE TAG IN GROUP
R = await Util.DeleteAsync("Tag/" + TestTag2Id.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateErrorCodeResponse(R, 2200, 400);
//TAG ITEM WITH GROUP OF TAGS
//CREATE WIDGET
D = new JObject();
D.name = Util.Uniquify("WIDGET_TAG_GROUP_TAG_TEST");
D.created = DateTime.Now.ToString();
D.dollarAmount = 1.11m;
D.active = true;
D.roles = 0;
R = await Util.PostAsync("Widget", await Util.GetTokenAsync("BizAdminFull"), D.ToString());
Util.ValidateDataReturnResponseOk(R);
long WidgetId = R.ObjectResponse["data"]["id"].Value<long>();
//CREATE TAGMAP (tag the widget)
/*
{
"tagGroupId": 0,
"tagToObjectId": 0,
"tagToObjectType": 0
}
*/
D = new JObject();
D.tagGroupId = TestTagGroupId;
D.tagToObjectId = WidgetId;
D.tagToObjectType = 2;//widget
R = await Util.PostAsync("TagGroup/TagObject", await Util.GetTokenAsync("BizAdminFull"), D.ToString());
Util.ValidateDataReturnResponseOk(R);
((JArray)R.ObjectResponse["data"]).Count.Should().Be(2);
//VALIDATE HAS TAGS FROM GROUP
D = new JObject();
D.objectId = WidgetId;
D.objectType = 2;//widget
R = await Util.GetAsync("TagMap/TagsOnObject/", await Util.GetTokenAsync("BizAdminFull"), D.ToString());
Util.ValidateDataReturnResponseOk(R);
Util.ValidateHTTPStatusCode(R, 200);
//there should be 2 of them
((JArray)R.ObjectResponse["data"]).Count.Should().Be(2);
//DELETE TAG-GROUP
R = await Util.DeleteAsync("TagGroup/" + TestTagGroupId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateHTTPStatusCode(R, 204);
//DELETE WIDGET (which will delete tagmaps as well)
R = await Util.DeleteAsync("Widget/" + WidgetId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateHTTPStatusCode(R, 204);
//VERIFY CAN NOW DELETE TAG IN GROUP
R = await Util.DeleteAsync("Tag/" + TestTag2Id.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateHTTPStatusCode(R, 204);
}
//==================================================
}//eoc
}//eons

View File

@@ -1,82 +0,0 @@
using System;
using Xunit;
using Newtonsoft.Json.Linq;
using FluentAssertions;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Collections.Concurrent;
namespace raven_integration
{
public class TagLists
{
/// <summary>
///
/// </summary>
[Fact]
public async void PickListSearchRouteShouldWorkAsExpected()
{
List<long> createdTagList = new List<long>();
//CREATE
dynamic d = new JObject();
d.name = Util.Uniquify("Apple");
ApiResponse a = await Util.PostAsync("Tag", await Util.GetTokenAsync("BizAdminFull"), d.ToString());
Util.ValidateDataReturnResponseOk(a);
createdTagList.Add(a.ObjectResponse["data"]["id"].Value<long>());
d.name = Util.Uniquify("Applesauce");
a = await Util.PostAsync("Tag", await Util.GetTokenAsync("BizAdminFull"), d.ToString());
Util.ValidateDataReturnResponseOk(a);
createdTagList.Add(a.ObjectResponse["data"]["id"].Value<long>());
d.name = Util.Uniquify("Apple-Tar-Tar");
a = await Util.PostAsync("Tag", await Util.GetTokenAsync("BizAdminFull"), d.ToString());
Util.ValidateDataReturnResponseOk(a);
createdTagList.Add(a.ObjectResponse["data"]["id"].Value<long>());
d.name = Util.Uniquify("Apple-Tini");
a = await Util.PostAsync("Tag", await Util.GetTokenAsync("BizAdminFull"), d.ToString());
Util.ValidateDataReturnResponseOk(a);
createdTagList.Add(a.ObjectResponse["data"]["id"].Value<long>());
d.name = Util.Uniquify("Apple-Pie");
a = await Util.PostAsync("Tag", await Util.GetTokenAsync("BizAdminFull"), d.ToString());
Util.ValidateDataReturnResponseOk(a);
createdTagList.Add(a.ObjectResponse["data"]["id"].Value<long>());
d.name = Util.Uniquify("AppleJack");
a = await Util.PostAsync("Tag", await Util.GetTokenAsync("BizAdminFull"), d.ToString());
Util.ValidateDataReturnResponseOk(a);
createdTagList.Add(a.ObjectResponse["data"]["id"].Value<long>());
//Get all
a = await Util.GetAsync("Tag/picklist?Offset=1&Limit=25&q=ApPlE", await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateDataReturnResponseOk(a);
Util.ValidateHTTPStatusCode(a, 200);
//there should be at least 5 of them
((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(4);
//Delete them all here (just a cleanup)
foreach (long lId in createdTagList)
{
a = await Util.DeleteAsync("Tag/" + lId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateHTTPStatusCode(a, 204);
}
}
//==================================================
}//eoc
}//eons

View File

@@ -1,375 +0,0 @@
using System;
using Xunit;
using Newtonsoft.Json.Linq;
using FluentAssertions;
using System.Collections.Generic;
using System.Collections.Concurrent;
namespace raven_integration
{
public class TagMapOps
{
/// <summary>
/// Test tagmap map unmap and etc
/// </summary>
[Fact]
public async void MapUnmapShouldWork()
{
/*
{
"name": "TestTag"
}
*/
//CREATE TAG
dynamic d = new JObject();
d.name = Util.Uniquify("test-tag-4-widget");
ApiResponse a = await Util.PostAsync("Tag", await Util.GetTokenAsync("BizAdminFull"), d.ToString());
Util.ValidateDataReturnResponseOk(a);
long tagId = a.ObjectResponse["data"]["id"].Value<long>();
//CREATE WIDGET
dynamic w = new JObject();
w.name = Util.Uniquify("WIDGET_TAG");
w.created = DateTime.Now.ToString();
w.dollarAmount = 1.11m;
w.active = true;
w.roles = 0;
a = await Util.PostAsync("Widget", await Util.GetTokenAsync("BizAdminFull"), w.ToString());
Util.ValidateDataReturnResponseOk(a);
long widgetId = a.ObjectResponse["data"]["id"].Value<long>();
//CREATE TAGMAP (tag the widget)
/*
{
"tagId": 0,
"tagToObjectId": 0,
"tagToObjectType": 0
}
*/
dynamic tm = new JObject();
tm.tagId = tagId;
tm.tagToObjectId = widgetId;
tm.tagToObjectType = 2;//widget
a = await Util.PostAsync("TagMap", await Util.GetTokenAsync("BizAdminFull"), tm.ToString());
Util.ValidateDataReturnResponseOk(a);
long tagMapId = a.ObjectResponse["data"]["id"].Value<long>();
//VERIFY TAGMAP
a = await Util.GetAsync("TagMap/" + tagMapId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateDataReturnResponseOk(a);
a.ObjectResponse["data"]["id"].Value<long>().Should().Be(tagMapId);
//ATTEMPT TO DELETE TAG THAT HAS TAGMAP SHOULD FAIL with 2200 / 400
a = await Util.DeleteAsync("Tag/" + tagId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateViolatesReferentialIntegrityError(a);
//DELETE TAGMAP
a = await Util.DeleteAsync("TagMap/" + tagMapId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateHTTPStatusCode(a, 204);
//DELETE TAG
a = await Util.DeleteAsync("Tag/" + tagId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateHTTPStatusCode(a, 204);
//DELETE WIDGET
a = await Util.DeleteAsync("Widget/" + widgetId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateHTTPStatusCode(a, 204);
}
/// <summary>
///
/// </summary>
[Fact]
public async void TagMapShouldDeleteWhenParentDeletes()
{
/*
{
"name": "TestTag"
}
*/
//CREATE TAG
dynamic d = new JObject();
d.name = Util.Uniquify("test-unmap-tag-4-widget");
ApiResponse a = await Util.PostAsync("Tag", await Util.GetTokenAsync("BizAdminFull"), d.ToString());
Util.ValidateDataReturnResponseOk(a);
long tagId = a.ObjectResponse["data"]["id"].Value<long>();
//CREATE WIDGET
dynamic w = new JObject();
w.name = Util.Uniquify("WIDGET_TAG_AUTO_UNMAP");
w.created = DateTime.Now.ToString();
w.dollarAmount = 1.11m;
w.active = true;
w.roles = 0;
a = await Util.PostAsync("Widget", await Util.GetTokenAsync("BizAdminFull"), w.ToString());
Util.ValidateDataReturnResponseOk(a);
long widgetId = a.ObjectResponse["data"]["id"].Value<long>();
//CREATE TAGMAP (tag the widget)
/*
{
"tagId": 0,
"tagToObjectId": 0,
"tagToObjectType": 0
}
*/
dynamic tm = new JObject();
tm.tagId = tagId;
tm.tagToObjectId = widgetId;
tm.tagToObjectType = 2;//widget
a = await Util.PostAsync("TagMap", await Util.GetTokenAsync("BizAdminFull"), tm.ToString());
Util.ValidateDataReturnResponseOk(a);
long tagMapId = a.ObjectResponse["data"]["id"].Value<long>();
//VERIFY TAGMAP
a = await Util.GetAsync("TagMap/" + tagMapId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateDataReturnResponseOk(a);
a.ObjectResponse["data"]["id"].Value<long>().Should().Be(tagMapId);
//DELETE PARENT (WIDGET)
a = await Util.DeleteAsync("Widget/" + widgetId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateHTTPStatusCode(a, 204);
//VERIFY TAGMAP GONE
a = await Util.GetAsync("TagMap/" + tagMapId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateResponseNotFound(a);
////////////////////////
//CLEANUP
//DELETE TAG
a = await Util.DeleteAsync("Tag/" + tagId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateHTTPStatusCode(a, 204);
}
/// <summary>
///
/// </summary>
[Fact]
public async void TagMapListForObject()
{
List<long> createdTagList = new List<long>();
//CREATE a bunch of tags
dynamic d = new JObject();
d.name = Util.Uniquify("Red");
ApiResponse a = await Util.PostAsync("Tag", await Util.GetTokenAsync("BizAdminFull"), d.ToString());
Util.ValidateDataReturnResponseOk(a);
createdTagList.Add(a.ObjectResponse["data"]["id"].Value<long>());
d.name = Util.Uniquify("red-green");
a = await Util.PostAsync("Tag", await Util.GetTokenAsync("BizAdminFull"), d.ToString());
Util.ValidateDataReturnResponseOk(a);
createdTagList.Add(a.ObjectResponse["data"]["id"].Value<long>());
d.name = Util.Uniquify("red-rum");
a = await Util.PostAsync("Tag", await Util.GetTokenAsync("BizAdminFull"), d.ToString());
Util.ValidateDataReturnResponseOk(a);
createdTagList.Add(a.ObjectResponse["data"]["id"].Value<long>());
d.name = Util.Uniquify("red-dit");
a = await Util.PostAsync("Tag", await Util.GetTokenAsync("BizAdminFull"), d.ToString());
Util.ValidateDataReturnResponseOk(a);
createdTagList.Add(a.ObjectResponse["data"]["id"].Value<long>());
d.name = Util.Uniquify("red-tailed-hawk");
a = await Util.PostAsync("Tag", await Util.GetTokenAsync("BizAdminFull"), d.ToString());
Util.ValidateDataReturnResponseOk(a);
createdTagList.Add(a.ObjectResponse["data"]["id"].Value<long>());
//Create a widget
dynamic w = new JObject();
w.name = Util.Uniquify("WIDGET_4_TAG_LIST_TEST");
w.created = DateTime.Now.ToString();
w.dollarAmount = 1.11m;
w.active = true;
w.roles = 0;
a = await Util.PostAsync("Widget", await Util.GetTokenAsync("BizAdminFull"), w.ToString());
Util.ValidateDataReturnResponseOk(a);
long widgetId = a.ObjectResponse["data"]["id"].Value<long>();
//Tag all the tags to the widget
dynamic tm = new JObject();
foreach (long tagId in createdTagList)
{
tm.tagId = tagId;
tm.tagToObjectId = widgetId;
tm.tagToObjectType = 2;//widget
a = await Util.PostAsync("TagMap", await Util.GetTokenAsync("BizAdminFull"), tm.ToString());
Util.ValidateDataReturnResponseOk(a);
}
//GET TAGS FOR WIDGET
dynamic tid = new JObject();
tid.objectId = widgetId;
tid.objectType = 2;//widget
a = await Util.GetAsync("TagMap/TagsOnObject/", await Util.GetTokenAsync("BizAdminFull"), tid.ToString());
Util.ValidateDataReturnResponseOk(a);
Util.ValidateHTTPStatusCode(a, 200);
//there should be at least 5 of them
((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterOrEqualTo(createdTagList.Count);
//delete widget (which will delete tagmaps as well)
a = await Util.DeleteAsync("Widget/" + widgetId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateHTTPStatusCode(a, 204);
//CLEANUP TAGS
foreach (long lId in createdTagList)
{
a = await Util.DeleteAsync("Tag/" + lId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateHTTPStatusCode(a, 204);
}
}
/// <summary>
/// Test tagging a bunch of items then mass untag
/// </summary>
[Fact]
public async void UnTagEverythingWorks()
{
/*
{
"name": "TestTag"
}
*/
//CREATE TAG
dynamic D = new JObject();
D.name = Util.Uniquify("test-tag-4-untag");
ApiResponse R = await Util.PostAsync("Tag", await Util.GetTokenAsync("BizAdminFull"), D.ToString());
Util.ValidateDataReturnResponseOk(R);
long TestTagId = R.ObjectResponse["data"]["id"].Value<long>();
//CREATE WIDGET 1
dynamic D2 = new JObject();
D2.name = Util.Uniquify("WIDGET_UNTAG_TEST1");
D2.created = DateTime.Now.ToString();
D2.dollarAmount = 1.11m;
D2.active = true;
D2.roles = 0;
R = await Util.PostAsync("Widget", await Util.GetTokenAsync("BizAdminFull"), D2.ToString());
Util.ValidateDataReturnResponseOk(R);
long Widget1Id = R.ObjectResponse["data"]["id"].Value<long>();
//CREATE WIDGET 2
//D2 = new JObject();
D2.name = Util.Uniquify("WIDGET_UNTAG_TEST2");
D2.created = DateTime.Now.ToString();
D2.dollarAmount = 1.11m;
D2.active = true;
D2.roles = 0;
R = await Util.PostAsync("Widget", await Util.GetTokenAsync("BizAdminFull"), D2.ToString());
Util.ValidateDataReturnResponseOk(R);
long Widget2Id = R.ObjectResponse["data"]["id"].Value<long>();
//TAGMAP to Widget 1
/*
{
"tagId": 0,
"tagToObjectId": 0,
"tagToObjectType": 0
}
*/
dynamic D3 = new JObject();
D3.tagId = TestTagId;
D3.tagToObjectId = Widget1Id;
D3.tagToObjectType = 2;//widget
R = await Util.PostAsync("TagMap", await Util.GetTokenAsync("BizAdminFull"), D3.ToString());
Util.ValidateDataReturnResponseOk(R);
long TagMap1Id = R.ObjectResponse["data"]["id"].Value<long>();
//VERIFY TAGMAP
R = await Util.GetAsync("TagMap/" + TagMap1Id.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateDataReturnResponseOk(R);
R.ObjectResponse["data"]["id"].Value<long>().Should().Be(TagMap1Id);
R.ObjectResponse["data"]["tagToObjectId"].Value<long>().Should().Be(Widget1Id);
//TAGMAP to Widget 2
D3.tagId = TestTagId;
D3.tagToObjectId = Widget2Id;
D3.tagToObjectType = 2;//widget
R = await Util.PostAsync("TagMap", await Util.GetTokenAsync("BizAdminFull"), D3.ToString());
Util.ValidateDataReturnResponseOk(R);
long TagMap2Id = R.ObjectResponse["data"]["id"].Value<long>();
//VERIFY TAGMAP
R = await Util.GetAsync("TagMap/" + TagMap2Id.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateDataReturnResponseOk(R);
R.ObjectResponse["data"]["id"].Value<long>().Should().Be(TagMap2Id);
R.ObjectResponse["data"]["tagToObjectId"].Value<long>().Should().Be(Widget2Id);
//UNTAG-ALL
R = await Util.PostAsync("Tag/UntagAll/" + TestTagId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateHTTPStatusCode(R, 204);
//DELETE TAG
//This should now work because untag all freed it up
R = await Util.DeleteAsync("Tag/" + TestTagId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateHTTPStatusCode(R, 204);
//DELETE WIDGETS
R = await Util.DeleteAsync("Widget/" + Widget1Id.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateHTTPStatusCode(R, 204);
R = await Util.DeleteAsync("Widget/" + Widget2Id.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateHTTPStatusCode(R, 204);
}
//==================================================
}//eoc
}//eons