Skip to content
6 changes: 6 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Global code owners - these users will be requested for review on all API SPEC PRs
# DX TEAM Members
* @lukeocodes

# Future Reference: you can also specify owners for specific paths if needed:
# /src/ @username1 @username2
255 changes: 255 additions & 0 deletions Deepgram.Tests/UnitTests/ClientTests/AgentClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -389,4 +389,259 @@ public void Agent_Should_Not_Have_MipOptOut_Property()
}

#endregion

#region Tags Tests

[Test]
public void SettingsSchema_Tags_Should_Have_Default_Value_Null()
{
// Arrange & Act
var settings = new SettingsSchema();

// Assert
using (new AssertionScope())
{
settings.Tags.Should().BeNull();
}
}

[Test]
public void SettingsSchema_Tags_Should_Be_Settable()
{
// Arrange & Act
var settings = new SettingsSchema
{
Tags = new List<string> { "test", "demo", "agent" }
};

// Assert
using (new AssertionScope())
{
settings.Tags.Should().NotBeNull();
settings.Tags.Should().HaveCount(3);
settings.Tags.Should().Contain("test");
settings.Tags.Should().Contain("demo");
settings.Tags.Should().Contain("agent");
}
}

[Test]
public void SettingsSchema_Tags_Should_Serialize_To_Json_Array()
{
// Arrange
var settings = new SettingsSchema
{
Tags = new List<string> { "production", "voice-bot", "customer-service" }
};

// Act
var result = settings.ToString();

// Assert
using (new AssertionScope())
{
result.Should().NotBeNull();
result.Should().Contain("tags");
result.Should().Contain("[");
result.Should().Contain("]");
result.Should().Contain("production");
result.Should().Contain("voice-bot");
result.Should().Contain("customer-service");

// Verify it's valid JSON by parsing it
var parsed = JsonDocument.Parse(result);
var tagsArray = parsed.RootElement.GetProperty("tags");
tagsArray.ValueKind.Should().Be(JsonValueKind.Array);
tagsArray.GetArrayLength().Should().Be(3);

var tagsList = new List<string>();
foreach (var tag in tagsArray.EnumerateArray())
{
tagsList.Add(tag.GetString()!);
}
tagsList.Should().Contain("production");
tagsList.Should().Contain("voice-bot");
tagsList.Should().Contain("customer-service");
}
}

[Test]
public void SettingsSchema_Tags_Empty_List_Should_Serialize_As_Empty_Array()
{
// Arrange
var settings = new SettingsSchema
{
Tags = new List<string>()
};

// Act
var result = settings.ToString();

// Assert
using (new AssertionScope())
{
result.Should().NotBeNull();
result.Should().Contain("tags");
result.Should().Contain("[]");

// Verify it's valid JSON by parsing it
var parsed = JsonDocument.Parse(result);
var tagsArray = parsed.RootElement.GetProperty("tags");
tagsArray.ValueKind.Should().Be(JsonValueKind.Array);
tagsArray.GetArrayLength().Should().Be(0);
}
}

[Test]
public void SettingsSchema_Tags_Null_Should_Not_Serialize()
{
// Arrange
var settings = new SettingsSchema
{
Tags = null
};

// Act
var result = settings.ToString();

// Assert
using (new AssertionScope())
{
result.Should().NotBeNull();
result.Should().NotContain("tags");

// Verify it's valid JSON by parsing it
var parsed = JsonDocument.Parse(result);
parsed.RootElement.TryGetProperty("tags", out _).Should().BeFalse();
}
}

[Test]
public void SettingsSchema_With_Tags_Should_Serialize_With_Other_Properties()
{
// Arrange
var settings = new SettingsSchema
{
Experimental = true,
MipOptOut = true,
Tags = new List<string> { "test-tag", "integration" }
};

// Act
var result = settings.ToString();

// Assert
using (new AssertionScope())
{
result.Should().NotBeNull();
result.Should().Contain("experimental");
result.Should().Contain("mip_opt_out");
result.Should().Contain("tags");

// Verify it's valid JSON by parsing it
var parsed = JsonDocument.Parse(result);
parsed.RootElement.GetProperty("experimental").GetBoolean().Should().BeTrue();
parsed.RootElement.GetProperty("mip_opt_out").GetBoolean().Should().BeTrue();

var tagsArray = parsed.RootElement.GetProperty("tags");
tagsArray.ValueKind.Should().Be(JsonValueKind.Array);
tagsArray.GetArrayLength().Should().Be(2);
}
}

[Test]
public void SettingsSchema_Tags_Should_Support_Special_Characters()
{
// Arrange
var settings = new SettingsSchema
{
Tags = new List<string> { "test-with-dashes", "test_with_underscores", "test with spaces", "test.with.dots" }
};

// Act
var result = settings.ToString();

// Assert
using (new AssertionScope())
{
result.Should().NotBeNull();

// Verify it's valid JSON by parsing it
var parsed = JsonDocument.Parse(result);
var tagsArray = parsed.RootElement.GetProperty("tags");
tagsArray.ValueKind.Should().Be(JsonValueKind.Array);
tagsArray.GetArrayLength().Should().Be(4);

var tagsList = new List<string>();
foreach (var tag in tagsArray.EnumerateArray())
{
tagsList.Add(tag.GetString()!);
}
tagsList.Should().Contain("test-with-dashes");
tagsList.Should().Contain("test_with_underscores");
tagsList.Should().Contain("test with spaces");
tagsList.Should().Contain("test.with.dots");
}
}

[Test]
public void SettingsSchema_Tags_Schema_Should_Match_API_Specification()
{
// Arrange - Test various scenarios as per API specification
var settingsWithTags = new SettingsSchema { Tags = new List<string> { "search-filter", "analytics", "production" } };
var settingsWithoutTags = new SettingsSchema { Tags = null };
var settingsWithEmptyTags = new SettingsSchema { Tags = new List<string>() };

// Act
var withTagsResult = settingsWithTags.ToString();
var withoutTagsResult = settingsWithoutTags.ToString();
var emptyTagsResult = settingsWithEmptyTags.ToString();

// Assert
using (new AssertionScope())
{
// With tags should serialize array
var withTagsParsed = JsonDocument.Parse(withTagsResult);
var tagsArray = withTagsParsed.RootElement.GetProperty("tags");
tagsArray.ValueKind.Should().Be(JsonValueKind.Array);
tagsArray.GetArrayLength().Should().Be(3);

// Without tags should not include tags property
var withoutTagsParsed = JsonDocument.Parse(withoutTagsResult);
withoutTagsParsed.RootElement.TryGetProperty("tags", out _).Should().BeFalse();

// Empty tags should serialize as empty array
var emptyTagsParsed = JsonDocument.Parse(emptyTagsResult);
var emptyTagsArray = emptyTagsParsed.RootElement.GetProperty("tags");
emptyTagsArray.ValueKind.Should().Be(JsonValueKind.Array);
emptyTagsArray.GetArrayLength().Should().Be(0);
}
}

[Test]
public void Agent_Should_Not_Have_Tags_Property()
{
// Arrange
var agent = new Agent
{
Language = "en",
Greeting = "Hello, I'm your agent"
};

// Act
var result = agent.ToString();

// Assert
using (new AssertionScope())
{
result.Should().NotBeNull();
result.Should().NotContain("tags");

// Verify it's valid JSON by parsing it
var parsed = JsonDocument.Parse(result);
parsed.RootElement.TryGetProperty("tags", out _).Should().BeFalse();
}
}

#endregion
}
Loading
Loading