diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ec332c88..60e7098ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,13 @@ ### Features Added -- Added `OpenAIAudioModelFactory`, `OpenAIEmbeddingsModelFactory`, and `OpenAIImagesModelFactory` static classes to the `Audio`, `Embeddings`, and `Images` namespaces, respectively. Model factories can be used to instantiate OpenAI models for mocking in non-live test scenarios. +- Added the following model factories (static classes that can be used to instantiate OpenAI models for mocking in non-live test scenarios): + - `OpenAIAudioModelFactory` in the `OpenAI.Audio` namespace + - `OpenAIEmbeddingsModelFactory` in the `OpenAI.Embeddings` namespace + - `OpenAIFilesModelFactory` in the `OpenAI.Files` namespace + - `OpenAIImagesModelFactory` in the `OpenAI.Images` namespace + - `OpenAIModelsModelFactory` in the `OpenAI.Models` namespace + - `OpenAIModerationsModelFactory` in the `OpenAI.Moderations` namespace ### Breaking Changes diff --git a/api/OpenAI.netstandard2.0.cs b/api/OpenAI.netstandard2.0.cs index 2504700eb..9937bf300 100644 --- a/api/OpenAI.netstandard2.0.cs +++ b/api/OpenAI.netstandard2.0.cs @@ -1711,6 +1711,10 @@ public class OpenAIFileInfoCollection : ObjectModel.ReadOnlyCollection items = null); + } public readonly partial struct OpenAIFileStatus : IEquatable { private readonly object _dummy; private readonly int _dummyPrimitive; @@ -1927,6 +1931,10 @@ public class OpenAIModelInfoCollection : ObjectModel.ReadOnlyCollection.GetFormatFromOptions(ModelReaderWriterOptions options); BinaryData IPersistableModel.Write(ModelReaderWriterOptions options); } + public static class OpenAIModelsModelFactory { + public static OpenAIModelInfo OpenAIModelInfo(string id = null, DateTimeOffset createdAt = default, string ownedBy = null); + public static OpenAIModelInfoCollection OpenAIModelInfoCollection(IEnumerable items = null); + } } namespace OpenAI.Moderations { public class ModerationCategories : IJsonModel, IPersistableModel { @@ -1999,6 +2007,12 @@ public class ModerationResult : IJsonModel, IPersistableModel< string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options); BinaryData IPersistableModel.Write(ModelReaderWriterOptions options); } + public static class OpenAIModerationsModelFactory { + public static ModerationCategories ModerationCategories(bool hate = false, bool hateThreatening = false, bool harassment = false, bool harassmentThreatening = false, bool selfHarm = false, bool selfHarmIntent = false, bool selfHarmInstructions = false, bool sexual = false, bool sexualMinors = false, bool violence = false, bool violenceGraphic = false); + public static ModerationCategoryScores ModerationCategoryScores(float hate = 0, float hateThreatening = 0, float harassment = 0, float harassmentThreatening = 0, float selfHarm = 0, float selfHarmIntent = 0, float selfHarmInstructions = 0, float sexual = 0, float sexualMinors = 0, float violence = 0, float violenceGraphic = 0); + public static ModerationCollection ModerationCollection(string id = null, string model = null, IEnumerable items = null); + public static ModerationResult ModerationResult(bool flagged = false, ModerationCategories categories = null, ModerationCategoryScores categoryScores = null); + } } namespace OpenAI.VectorStores { public abstract class FileChunkingStrategy : IJsonModel, IPersistableModel { diff --git a/src/Custom/Embeddings/OpenAIEmbeddingsModelFactory.cs b/src/Custom/Embeddings/OpenAIEmbeddingsModelFactory.cs index ff03606c8..c2b94109c 100644 --- a/src/Custom/Embeddings/OpenAIEmbeddingsModelFactory.cs +++ b/src/Custom/Embeddings/OpenAIEmbeddingsModelFactory.cs @@ -26,7 +26,7 @@ public static EmbeddingCollection EmbeddingCollection(IEnumerable ite return new EmbeddingCollection( items.ToList(), model, - @object: default, + InternalCreateEmbeddingResponseObject.List, usage, serializedAdditionalRawData: null); } diff --git a/src/Custom/Files/OpenAIFilesModelFactory.cs b/src/Custom/Files/OpenAIFilesModelFactory.cs new file mode 100644 index 000000000..0d79b520e --- /dev/null +++ b/src/Custom/Files/OpenAIFilesModelFactory.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace OpenAI.Files; + +/// Model factory for models. +public static partial class OpenAIFilesModelFactory +{ + /// Initializes a new instance of . + /// A new instance for mocking. + public static OpenAIFileInfo OpenAIFileInfo(string id = null, long? sizeInBytes = null, DateTimeOffset createdAt = default, string filename = null, OpenAIFilePurpose purpose = default, OpenAIFileStatus status = default, string statusDetails = null) + { + return new OpenAIFileInfo( + id, + sizeInBytes, + createdAt, + filename, + @object: InternalOpenAIFileObject.File, + purpose, + status, + statusDetails, + serializedAdditionalRawData: null); + } + + /// Initializes a new instance of . + /// A new instance for mocking. + public static OpenAIFileInfoCollection OpenAIFileInfoCollection(IEnumerable items = null) + { + items ??= new List(); + + return new OpenAIFileInfoCollection( + items.ToList(), + InternalListFilesResponseObject.List, + serializedAdditionalRawData: null); + } +} diff --git a/src/Custom/Models/OpenAIModelsModelFactory.cs b/src/Custom/Models/OpenAIModelsModelFactory.cs new file mode 100644 index 000000000..960f6b5e2 --- /dev/null +++ b/src/Custom/Models/OpenAIModelsModelFactory.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace OpenAI.Models; + +/// Model factory for models. +public static partial class OpenAIModelsModelFactory +{ + /// Initializes a new instance of . + /// A new instance for mocking. + public static OpenAIModelInfo OpenAIModelInfo(string id = null, DateTimeOffset createdAt = default, string ownedBy = null) + { + return new OpenAIModelInfo( + id, + createdAt, + InternalModelObject.Model, + ownedBy, + serializedAdditionalRawData: null); + } + + /// Initializes a new instance of . + /// A new instance for mocking. + public static OpenAIModelInfoCollection OpenAIModelInfoCollection(IEnumerable items = null) + { + items ??= new List(); + + return new OpenAIModelInfoCollection( + InternalListModelsResponseObject.List, + items.ToList(), + serializedAdditionalRawData: null); + } +} diff --git a/src/Custom/Moderations/OpenAIModerationsModelFactory.cs b/src/Custom/Moderations/OpenAIModerationsModelFactory.cs new file mode 100644 index 000000000..f81a2a59d --- /dev/null +++ b/src/Custom/Moderations/OpenAIModerationsModelFactory.cs @@ -0,0 +1,70 @@ +using System.Collections.Generic; +using System.Linq; + +namespace OpenAI.Moderations; + +/// Model factory for models. +public static partial class OpenAIModerationsModelFactory +{ + /// Initializes a new instance of . + /// A new instance for mocking. + public static ModerationCategories ModerationCategories(bool hate = default, bool hateThreatening = default, bool harassment = default, bool harassmentThreatening = default, bool selfHarm = default, bool selfHarmIntent = default, bool selfHarmInstructions = default, bool sexual = default, bool sexualMinors = default, bool violence = default, bool violenceGraphic = default) + { + return new ModerationCategories( + hate, + hateThreatening, + harassment, + harassmentThreatening, + selfHarm, + selfHarmIntent, + selfHarmInstructions, + sexual, + sexualMinors, + violence, + violenceGraphic, + serializedAdditionalRawData: null); + } + + /// Initializes a new instance of . + /// A new instance for mocking. + public static ModerationCategoryScores ModerationCategoryScores(float hate = default, float hateThreatening = default, float harassment = default, float harassmentThreatening = default, float selfHarm = default, float selfHarmIntent = default, float selfHarmInstructions = default, float sexual = default, float sexualMinors = default, float violence = default, float violenceGraphic = default) + { + return new ModerationCategoryScores( + hate, + hateThreatening, + harassment, + harassmentThreatening, + selfHarm, + selfHarmIntent, + selfHarmInstructions, + sexual, + sexualMinors, + violence, + violenceGraphic, + serializedAdditionalRawData: null); + } + + /// Initializes a new instance of . + /// A new instance for mocking. + public static ModerationCollection ModerationCollection(string id = null, string model = null, IEnumerable items = null) + { + items ??= new List(); + + return new ModerationCollection( + id, + model, + items.ToList(), + serializedAdditionalRawData: null); + } + + /// Initializes a new instance of . + /// A new instance for mocking. + public static ModerationResult ModerationResult(bool flagged = default, ModerationCategories categories = null, ModerationCategoryScores categoryScores = null) + { + return new ModerationResult( + flagged, + categories, + categoryScores, + serializedAdditionalRawData: null); + } +} diff --git a/tests/Embeddings/OpenAIEmbeddingsModelFactoryTests.cs b/tests/Embeddings/OpenAIEmbeddingsModelFactoryTests.cs index 7de4d354f..b57e80f54 100644 --- a/tests/Embeddings/OpenAIEmbeddingsModelFactoryTests.cs +++ b/tests/Embeddings/OpenAIEmbeddingsModelFactoryTests.cs @@ -3,114 +3,113 @@ using NUnit.Framework; using OpenAI.Embeddings; -namespace OpenAI.Tests.Embeddings +namespace OpenAI.Tests.Embeddings; + +[Parallelizable(ParallelScope.All)] +[Category("Smoke")] +public partial class OpenAIEmbeddingsModelFactoryTests { - [Parallelizable(ParallelScope.All)] - [Category("Smoke")] - public partial class OpenAIEmbeddingsModelFactoryTests + [Test] + public void EmbeddingWithNoPropertiesWorks() + { + Embedding embedding = OpenAIEmbeddingsModelFactory.Embedding(); + + Assert.That(embedding.Index, Is.EqualTo(default(int))); + Assert.That(embedding.Vector.ToArray(), Is.Not.Null.And.Empty); + } + + [Test] + public void EmbeddingWithIndexWorks() { - [Test] - public void EmbeddingWithNoPropertiesWorks() - { - Embedding embedding = OpenAIEmbeddingsModelFactory.Embedding(); - - Assert.That(embedding.Index, Is.EqualTo(default(int))); - Assert.That(embedding.Vector.ToArray(), Is.Not.Null.And.Empty); - } - - [Test] - public void EmbeddingWithIndexWorks() - { - int index = 10; - Embedding embedding = OpenAIEmbeddingsModelFactory.Embedding(index: index); - - Assert.That(embedding.Index, Is.EqualTo(index)); - Assert.That(embedding.Vector.ToArray(), Is.Not.Null.And.Empty); - } - - [Test] - public void EmbeddingWithVectorWorks() - { - IEnumerable vector = [ 1f, 2f, 3f ]; - Embedding embedding = OpenAIEmbeddingsModelFactory.Embedding(vector: vector); - - Assert.That(embedding.Index, Is.EqualTo(default(int))); - Assert.That(embedding.Vector.ToArray().SequenceEqual(vector), Is.True); - } - - [Test] - public void EmbeddingCollectionWithNoPropertiesWorks() - { - EmbeddingCollection embeddingCollection = OpenAIEmbeddingsModelFactory.EmbeddingCollection(); - - Assert.That(embeddingCollection.Count, Is.EqualTo(0)); - Assert.That(embeddingCollection.Model, Is.Null); - Assert.That(embeddingCollection.Usage, Is.Null); - } - - [Test] - public void EmbeddingCollectionWithItemsWorks() - { - IEnumerable items = [ - OpenAIEmbeddingsModelFactory.Embedding(index: 10), - OpenAIEmbeddingsModelFactory.Embedding(index: 20) - ]; - EmbeddingCollection embeddingCollection = OpenAIEmbeddingsModelFactory.EmbeddingCollection(items: items); - - Assert.That(embeddingCollection.SequenceEqual(items), Is.True); - Assert.That(embeddingCollection.Model, Is.Null); - Assert.That(embeddingCollection.Usage, Is.Null); - } - - [Test] - public void EmbeddingCollectionWithModelWorks() - { - string model = "supermodel"; - EmbeddingCollection embeddingCollection = OpenAIEmbeddingsModelFactory.EmbeddingCollection(model: model); - - Assert.That(embeddingCollection.Count, Is.EqualTo(0)); - Assert.That(embeddingCollection.Model, Is.EqualTo(model)); - Assert.That(embeddingCollection.Usage, Is.Null); - } - - [Test] - public void EmbeddingCollectionWithUsageWorks() - { - EmbeddingTokenUsage usage = OpenAIEmbeddingsModelFactory.EmbeddingTokenUsage(inputTokens: 10); - EmbeddingCollection embeddingCollection = OpenAIEmbeddingsModelFactory.EmbeddingCollection(usage: usage); - - Assert.That(embeddingCollection.Count, Is.EqualTo(0)); - Assert.That(embeddingCollection.Model, Is.Null); - Assert.That(embeddingCollection.Usage, Is.EqualTo(usage)); - } - - [Test] - public void EmbeddingTokenUsageWithNoPropertiesWorks() - { - EmbeddingTokenUsage embeddingTokenUsage = OpenAIEmbeddingsModelFactory.EmbeddingTokenUsage(); - - Assert.That(embeddingTokenUsage.InputTokens, Is.EqualTo(default(int))); - Assert.That(embeddingTokenUsage.TotalTokens, Is.EqualTo(default(int))); - } - - [Test] - public void EmbeddingTokenUsageWithInputTokensWorks() - { - int inputTokens = 10; - EmbeddingTokenUsage embeddingTokenUsage = OpenAIEmbeddingsModelFactory.EmbeddingTokenUsage(inputTokens: inputTokens); - - Assert.That(embeddingTokenUsage.InputTokens, Is.EqualTo(10)); - Assert.That(embeddingTokenUsage.TotalTokens, Is.EqualTo(default(int))); - } - - [Test] - public void EmbeddingTokenUsageWithTotalTokensWorks() - { - int totalTokens = 10; - EmbeddingTokenUsage embeddingTokenUsage = OpenAIEmbeddingsModelFactory.EmbeddingTokenUsage(totalTokens: totalTokens); - - Assert.That(embeddingTokenUsage.InputTokens, Is.EqualTo(default(int))); - Assert.That(embeddingTokenUsage.TotalTokens, Is.EqualTo(totalTokens)); - } + int index = 10; + Embedding embedding = OpenAIEmbeddingsModelFactory.Embedding(index: index); + + Assert.That(embedding.Index, Is.EqualTo(index)); + Assert.That(embedding.Vector.ToArray(), Is.Not.Null.And.Empty); + } + + [Test] + public void EmbeddingWithVectorWorks() + { + IEnumerable vector = [ 1f, 2f, 3f ]; + Embedding embedding = OpenAIEmbeddingsModelFactory.Embedding(vector: vector); + + Assert.That(embedding.Index, Is.EqualTo(default(int))); + Assert.That(embedding.Vector.ToArray().SequenceEqual(vector), Is.True); + } + + [Test] + public void EmbeddingCollectionWithNoPropertiesWorks() + { + EmbeddingCollection embeddingCollection = OpenAIEmbeddingsModelFactory.EmbeddingCollection(); + + Assert.That(embeddingCollection.Count, Is.EqualTo(0)); + Assert.That(embeddingCollection.Model, Is.Null); + Assert.That(embeddingCollection.Usage, Is.Null); + } + + [Test] + public void EmbeddingCollectionWithItemsWorks() + { + IEnumerable items = [ + OpenAIEmbeddingsModelFactory.Embedding(index: 10), + OpenAIEmbeddingsModelFactory.Embedding(index: 20) + ]; + EmbeddingCollection embeddingCollection = OpenAIEmbeddingsModelFactory.EmbeddingCollection(items: items); + + Assert.That(embeddingCollection.SequenceEqual(items), Is.True); + Assert.That(embeddingCollection.Model, Is.Null); + Assert.That(embeddingCollection.Usage, Is.Null); + } + + [Test] + public void EmbeddingCollectionWithModelWorks() + { + string model = "supermodel"; + EmbeddingCollection embeddingCollection = OpenAIEmbeddingsModelFactory.EmbeddingCollection(model: model); + + Assert.That(embeddingCollection.Count, Is.EqualTo(0)); + Assert.That(embeddingCollection.Model, Is.EqualTo(model)); + Assert.That(embeddingCollection.Usage, Is.Null); + } + + [Test] + public void EmbeddingCollectionWithUsageWorks() + { + EmbeddingTokenUsage usage = OpenAIEmbeddingsModelFactory.EmbeddingTokenUsage(inputTokens: 10); + EmbeddingCollection embeddingCollection = OpenAIEmbeddingsModelFactory.EmbeddingCollection(usage: usage); + + Assert.That(embeddingCollection.Count, Is.EqualTo(0)); + Assert.That(embeddingCollection.Model, Is.Null); + Assert.That(embeddingCollection.Usage, Is.EqualTo(usage)); + } + + [Test] + public void EmbeddingTokenUsageWithNoPropertiesWorks() + { + EmbeddingTokenUsage embeddingTokenUsage = OpenAIEmbeddingsModelFactory.EmbeddingTokenUsage(); + + Assert.That(embeddingTokenUsage.InputTokens, Is.EqualTo(default(int))); + Assert.That(embeddingTokenUsage.TotalTokens, Is.EqualTo(default(int))); + } + + [Test] + public void EmbeddingTokenUsageWithInputTokensWorks() + { + int inputTokens = 10; + EmbeddingTokenUsage embeddingTokenUsage = OpenAIEmbeddingsModelFactory.EmbeddingTokenUsage(inputTokens: inputTokens); + + Assert.That(embeddingTokenUsage.InputTokens, Is.EqualTo(10)); + Assert.That(embeddingTokenUsage.TotalTokens, Is.EqualTo(default(int))); + } + + [Test] + public void EmbeddingTokenUsageWithTotalTokensWorks() + { + int totalTokens = 10; + EmbeddingTokenUsage embeddingTokenUsage = OpenAIEmbeddingsModelFactory.EmbeddingTokenUsage(totalTokens: totalTokens); + + Assert.That(embeddingTokenUsage.InputTokens, Is.EqualTo(default(int))); + Assert.That(embeddingTokenUsage.TotalTokens, Is.EqualTo(totalTokens)); } } diff --git a/tests/Files/OpenAIFilesModelFactoryTests.cs b/tests/Files/OpenAIFilesModelFactoryTests.cs new file mode 100644 index 000000000..4badc7a85 --- /dev/null +++ b/tests/Files/OpenAIFilesModelFactoryTests.cs @@ -0,0 +1,151 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using OpenAI.Files; + +namespace OpenAI.Tests.Files; + +[Parallelizable(ParallelScope.All)] +[Category("Smoke")] +public partial class OpenAIFilesModelFactoryTests +{ + [Test] + public void OpenAIFileInfoWithNoPropertiesWorks() + { + OpenAIFileInfo openAIFileInfo = OpenAIFilesModelFactory.OpenAIFileInfo(); + + Assert.That(openAIFileInfo.Id, Is.Null); + Assert.That(openAIFileInfo.SizeInBytes, Is.Null); + Assert.That(openAIFileInfo.CreatedAt, Is.EqualTo(default(DateTimeOffset))); + Assert.That(openAIFileInfo.Filename, Is.Null); + Assert.That(openAIFileInfo.Purpose, Is.EqualTo(default(OpenAIFilePurpose))); + Assert.That(openAIFileInfo.Status, Is.EqualTo(default(OpenAIFileStatus))); + Assert.That(openAIFileInfo.StatusDetails, Is.Null); + } + + [Test] + public void OpenAIFileInfoWithIdWorks() + { + string id = "fileId"; + OpenAIFileInfo openAIFileInfo = OpenAIFilesModelFactory.OpenAIFileInfo(id: id); + + Assert.That(openAIFileInfo.Id, Is.EqualTo(id)); + Assert.That(openAIFileInfo.SizeInBytes, Is.Null); + Assert.That(openAIFileInfo.CreatedAt, Is.EqualTo(default(DateTimeOffset))); + Assert.That(openAIFileInfo.Filename, Is.Null); + Assert.That(openAIFileInfo.Purpose, Is.EqualTo(default(OpenAIFilePurpose))); + Assert.That(openAIFileInfo.Status, Is.EqualTo(default(OpenAIFileStatus))); + Assert.That(openAIFileInfo.StatusDetails, Is.Null); + } + + [Test] + public void OpenAIFileInfoWithSizeInBytesWorks() + { + int sizeInBytes = 1025; + OpenAIFileInfo openAIFileInfo = OpenAIFilesModelFactory.OpenAIFileInfo(sizeInBytes: sizeInBytes); + + Assert.That(openAIFileInfo.Id, Is.Null); + Assert.That(openAIFileInfo.SizeInBytes, Is.EqualTo(sizeInBytes)); + Assert.That(openAIFileInfo.CreatedAt, Is.EqualTo(default(DateTimeOffset))); + Assert.That(openAIFileInfo.Filename, Is.Null); + Assert.That(openAIFileInfo.Purpose, Is.EqualTo(default(OpenAIFilePurpose))); + Assert.That(openAIFileInfo.Status, Is.EqualTo(default(OpenAIFileStatus))); + Assert.That(openAIFileInfo.StatusDetails, Is.Null); + } + + [Test] + public void OpenAIFileInfoWithCreatedAtWorks() + { + DateTimeOffset createdAt = DateTimeOffset.UtcNow; + OpenAIFileInfo openAIFileInfo = OpenAIFilesModelFactory.OpenAIFileInfo(createdAt: createdAt); + + Assert.That(openAIFileInfo.Id, Is.Null); + Assert.That(openAIFileInfo.SizeInBytes, Is.Null); + Assert.That(openAIFileInfo.CreatedAt, Is.EqualTo(createdAt)); + Assert.That(openAIFileInfo.Filename, Is.Null); + Assert.That(openAIFileInfo.Purpose, Is.EqualTo(default(OpenAIFilePurpose))); + Assert.That(openAIFileInfo.Status, Is.EqualTo(default(OpenAIFileStatus))); + Assert.That(openAIFileInfo.StatusDetails, Is.Null); + } + + [Test] + public void OpenAIFileInfoWithFilenameWorks() + { + string filename = "file.png"; + OpenAIFileInfo openAIFileInfo = OpenAIFilesModelFactory.OpenAIFileInfo(filename: filename); + + Assert.That(openAIFileInfo.Id, Is.Null); + Assert.That(openAIFileInfo.SizeInBytes, Is.Null); + Assert.That(openAIFileInfo.CreatedAt, Is.EqualTo(default(DateTimeOffset))); + Assert.That(openAIFileInfo.Filename, Is.EqualTo(filename)); + Assert.That(openAIFileInfo.Purpose, Is.EqualTo(default(OpenAIFilePurpose))); + Assert.That(openAIFileInfo.Status, Is.EqualTo(default(OpenAIFileStatus))); + Assert.That(openAIFileInfo.StatusDetails, Is.Null); + } + + [Test] + public void OpenAIFileInfoWithPurposeWorks() + { + OpenAIFilePurpose purpose = OpenAIFilePurpose.Vision; + OpenAIFileInfo openAIFileInfo = OpenAIFilesModelFactory.OpenAIFileInfo(purpose: purpose); + + Assert.That(openAIFileInfo.Id, Is.Null); + Assert.That(openAIFileInfo.SizeInBytes, Is.Null); + Assert.That(openAIFileInfo.CreatedAt, Is.EqualTo(default(DateTimeOffset))); + Assert.That(openAIFileInfo.Filename, Is.Null); + Assert.That(openAIFileInfo.Purpose, Is.EqualTo(purpose)); + Assert.That(openAIFileInfo.Status, Is.EqualTo(default(OpenAIFileStatus))); + Assert.That(openAIFileInfo.StatusDetails, Is.Null); + } + + [Test] + public void OpenAIFileInfoWithStatusWorks() + { + OpenAIFileStatus status = OpenAIFileStatus.Uploaded; + OpenAIFileInfo openAIFileInfo = OpenAIFilesModelFactory.OpenAIFileInfo(status: status); + + Assert.That(openAIFileInfo.Id, Is.Null); + Assert.That(openAIFileInfo.SizeInBytes, Is.Null); + Assert.That(openAIFileInfo.CreatedAt, Is.EqualTo(default(DateTimeOffset))); + Assert.That(openAIFileInfo.Filename, Is.Null); + Assert.That(openAIFileInfo.Purpose, Is.EqualTo(default(OpenAIFilePurpose))); + Assert.That(openAIFileInfo.Status, Is.EqualTo(status)); + Assert.That(openAIFileInfo.StatusDetails, Is.Null); + } + + [Test] + public void OpenAIFileInfoWithStatusDetailsWorks() + { + string statusDetails = "There's something off about this file."; + OpenAIFileInfo openAIFileInfo = OpenAIFilesModelFactory.OpenAIFileInfo(statusDetails: statusDetails); + + Assert.That(openAIFileInfo.Id, Is.Null); + Assert.That(openAIFileInfo.SizeInBytes, Is.Null); + Assert.That(openAIFileInfo.CreatedAt, Is.EqualTo(default(DateTimeOffset))); + Assert.That(openAIFileInfo.Filename, Is.Null); + Assert.That(openAIFileInfo.Purpose, Is.EqualTo(default(OpenAIFilePurpose))); + Assert.That(openAIFileInfo.Status, Is.EqualTo(default(OpenAIFileStatus))); + Assert.That(openAIFileInfo.StatusDetails, Is.EqualTo(statusDetails)); + } + + [Test] + public void OpenAIFileInfoCollectionWithNoPropertiesWorks() + { + OpenAIFileInfoCollection openAIFileInfoCollection = OpenAIFilesModelFactory.OpenAIFileInfoCollection(); + + Assert.That(openAIFileInfoCollection.Count, Is.EqualTo(0)); + } + + [Test] + public void OpenAIFileInfoCollectionWithItemsWorks() + { + IEnumerable items = [ + OpenAIFilesModelFactory.OpenAIFileInfo(id: "firstFile"), + OpenAIFilesModelFactory.OpenAIFileInfo(id: "secondFile") + ]; + OpenAIFileInfoCollection openAIFileInfoCollection = OpenAIFilesModelFactory.OpenAIFileInfoCollection(items: items); + + Assert.That(openAIFileInfoCollection.SequenceEqual(items), Is.True); + } +} diff --git a/tests/Models/OpenAIModelsModelFactoryTests.cs b/tests/Models/OpenAIModelsModelFactoryTests.cs new file mode 100644 index 000000000..f7be3e02a --- /dev/null +++ b/tests/Models/OpenAIModelsModelFactoryTests.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using OpenAI.Models; + +namespace OpenAI.Tests.Models; + +[Parallelizable(ParallelScope.All)] +[Category("Smoke")] +public partial class OpenAIModelsModelFactoryTests +{ + [Test] + public void OpenAIModelInfoWithNoPropertiesWorks() + { + OpenAIModelInfo openAIModelInfo = OpenAIModelsModelFactory.OpenAIModelInfo(); + + Assert.That(openAIModelInfo.Id, Is.Null); + Assert.That(openAIModelInfo.CreatedAt, Is.EqualTo(default(DateTimeOffset))); + Assert.That(openAIModelInfo.OwnedBy, Is.Null); + } + + [Test] + public void OpenAIModelInfoWithIdWorks() + { + string id = "modelId"; + OpenAIModelInfo openAIModelInfo = OpenAIModelsModelFactory.OpenAIModelInfo(id: id); + + Assert.That(openAIModelInfo.Id, Is.EqualTo(id)); + Assert.That(openAIModelInfo.CreatedAt, Is.EqualTo(default(DateTimeOffset))); + Assert.That(openAIModelInfo.OwnedBy, Is.Null); + } + + [Test] + public void OpenAIModelInfoWithCreatedAtWorks() + { + DateTimeOffset createdAt = DateTimeOffset.UtcNow; + OpenAIModelInfo openAIModelInfo = OpenAIModelsModelFactory.OpenAIModelInfo(createdAt: createdAt); + + Assert.That(openAIModelInfo.Id, Is.Null); + Assert.That(openAIModelInfo.CreatedAt, Is.EqualTo(createdAt)); + Assert.That(openAIModelInfo.OwnedBy, Is.Null); + } + + [Test] + public void OpenAIModelInfoWithOwnedByWorks() + { + string ownedBy = "The people"; + OpenAIModelInfo openAIModelInfo = OpenAIModelsModelFactory.OpenAIModelInfo(ownedBy: ownedBy); + + Assert.That(openAIModelInfo.Id, Is.Null); + Assert.That(openAIModelInfo.CreatedAt, Is.EqualTo(default(DateTimeOffset))); + Assert.That(openAIModelInfo.OwnedBy, Is.EqualTo(ownedBy)); + } + + [Test] + public void OpenAIModelInfoCollectionWithNoPropertiesWorks() + { + OpenAIModelInfoCollection openAIModelInfoCollection = OpenAIModelsModelFactory.OpenAIModelInfoCollection(); + + Assert.That(openAIModelInfoCollection.Count, Is.EqualTo(0)); + } + + [Test] + public void OpenAIModelInfoCollectionWithItemsWorks() + { + IEnumerable items = [ + OpenAIModelsModelFactory.OpenAIModelInfo(id: "firstModel"), + OpenAIModelsModelFactory.OpenAIModelInfo(id: "secondModel") + ]; + OpenAIModelInfoCollection openAIModelInfoCollection = OpenAIModelsModelFactory.OpenAIModelInfoCollection(items: items); + + Assert.That(openAIModelInfoCollection.SequenceEqual(items), Is.True); + } +} diff --git a/tests/Moderations/OpenAIModerationsModelFactoryTests.cs b/tests/Moderations/OpenAIModerationsModelFactoryTests.cs new file mode 100644 index 000000000..2b5660b8e --- /dev/null +++ b/tests/Moderations/OpenAIModerationsModelFactoryTests.cs @@ -0,0 +1,543 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using OpenAI.Moderations; + +namespace OpenAI.Tests.Moderations; + +[Parallelizable(ParallelScope.All)] +[Category("Smoke")] +public partial class OpenAIModerationsModelFactoryTests +{ + [Test] + public void ModerationCategoriesWithNoPropertiesWorks() + { + ModerationCategories moderationCategories = OpenAIModerationsModelFactory.ModerationCategories(); + + Assert.That(moderationCategories.Hate, Is.False); + Assert.That(moderationCategories.HateThreatening, Is.False); + Assert.That(moderationCategories.Harassment, Is.False); + Assert.That(moderationCategories.HarassmentThreatening, Is.False); + Assert.That(moderationCategories.SelfHarm, Is.False); + Assert.That(moderationCategories.SelfHarmIntent, Is.False); + Assert.That(moderationCategories.SelfHarmInstructions, Is.False); + Assert.That(moderationCategories.Sexual, Is.False); + Assert.That(moderationCategories.SexualMinors, Is.False); + Assert.That(moderationCategories.Violence, Is.False); + Assert.That(moderationCategories.ViolenceGraphic, Is.False); + } + + [Test] + public void ModerationCategoriesWithHateWorks() + { + ModerationCategories moderationCategories = OpenAIModerationsModelFactory.ModerationCategories(hate: true); + + Assert.That(moderationCategories.Hate, Is.True); + Assert.That(moderationCategories.HateThreatening, Is.False); + Assert.That(moderationCategories.Harassment, Is.False); + Assert.That(moderationCategories.HarassmentThreatening, Is.False); + Assert.That(moderationCategories.SelfHarm, Is.False); + Assert.That(moderationCategories.SelfHarmIntent, Is.False); + Assert.That(moderationCategories.SelfHarmInstructions, Is.False); + Assert.That(moderationCategories.Sexual, Is.False); + Assert.That(moderationCategories.SexualMinors, Is.False); + Assert.That(moderationCategories.Violence, Is.False); + Assert.That(moderationCategories.ViolenceGraphic, Is.False); + } + + [Test] + public void ModerationCategoriesWithHateThreateningWorks() + { + ModerationCategories moderationCategories = OpenAIModerationsModelFactory.ModerationCategories(hateThreatening: true); + + Assert.That(moderationCategories.Hate, Is.False); + Assert.That(moderationCategories.HateThreatening, Is.True); + Assert.That(moderationCategories.Harassment, Is.False); + Assert.That(moderationCategories.HarassmentThreatening, Is.False); + Assert.That(moderationCategories.SelfHarm, Is.False); + Assert.That(moderationCategories.SelfHarmIntent, Is.False); + Assert.That(moderationCategories.SelfHarmInstructions, Is.False); + Assert.That(moderationCategories.Sexual, Is.False); + Assert.That(moderationCategories.SexualMinors, Is.False); + Assert.That(moderationCategories.Violence, Is.False); + Assert.That(moderationCategories.ViolenceGraphic, Is.False); + } + + [Test] + public void ModerationCategoriesWithHarassmentWorks() + { + ModerationCategories moderationCategories = OpenAIModerationsModelFactory.ModerationCategories(harassment: true); + + Assert.That(moderationCategories.Hate, Is.False); + Assert.That(moderationCategories.HateThreatening, Is.False); + Assert.That(moderationCategories.Harassment, Is.True); + Assert.That(moderationCategories.HarassmentThreatening, Is.False); + Assert.That(moderationCategories.SelfHarm, Is.False); + Assert.That(moderationCategories.SelfHarmIntent, Is.False); + Assert.That(moderationCategories.SelfHarmInstructions, Is.False); + Assert.That(moderationCategories.Sexual, Is.False); + Assert.That(moderationCategories.SexualMinors, Is.False); + Assert.That(moderationCategories.Violence, Is.False); + Assert.That(moderationCategories.ViolenceGraphic, Is.False); + } + + [Test] + public void ModerationCategoriesWithHarassmentThreateningWorks() + { + ModerationCategories moderationCategories = OpenAIModerationsModelFactory.ModerationCategories(harassmentThreatening: true); + + Assert.That(moderationCategories.Hate, Is.False); + Assert.That(moderationCategories.HateThreatening, Is.False); + Assert.That(moderationCategories.Harassment, Is.False); + Assert.That(moderationCategories.HarassmentThreatening, Is.True); + Assert.That(moderationCategories.SelfHarm, Is.False); + Assert.That(moderationCategories.SelfHarmIntent, Is.False); + Assert.That(moderationCategories.SelfHarmInstructions, Is.False); + Assert.That(moderationCategories.Sexual, Is.False); + Assert.That(moderationCategories.SexualMinors, Is.False); + Assert.That(moderationCategories.Violence, Is.False); + Assert.That(moderationCategories.ViolenceGraphic, Is.False); + } + + [Test] + public void ModerationCategoriesWithSelfHarmWorks() + { + ModerationCategories moderationCategories = OpenAIModerationsModelFactory.ModerationCategories(selfHarm: true); + + Assert.That(moderationCategories.Hate, Is.False); + Assert.That(moderationCategories.HateThreatening, Is.False); + Assert.That(moderationCategories.Harassment, Is.False); + Assert.That(moderationCategories.HarassmentThreatening, Is.False); + Assert.That(moderationCategories.SelfHarm, Is.True); + Assert.That(moderationCategories.SelfHarmIntent, Is.False); + Assert.That(moderationCategories.SelfHarmInstructions, Is.False); + Assert.That(moderationCategories.Sexual, Is.False); + Assert.That(moderationCategories.SexualMinors, Is.False); + Assert.That(moderationCategories.Violence, Is.False); + Assert.That(moderationCategories.ViolenceGraphic, Is.False); + } + + [Test] + public void ModerationCategoriesWithSelfHarmIntentWorks() + { + ModerationCategories moderationCategories = OpenAIModerationsModelFactory.ModerationCategories(selfHarmIntent: true); + + Assert.That(moderationCategories.Hate, Is.False); + Assert.That(moderationCategories.HateThreatening, Is.False); + Assert.That(moderationCategories.Harassment, Is.False); + Assert.That(moderationCategories.HarassmentThreatening, Is.False); + Assert.That(moderationCategories.SelfHarm, Is.False); + Assert.That(moderationCategories.SelfHarmIntent, Is.True); + Assert.That(moderationCategories.SelfHarmInstructions, Is.False); + Assert.That(moderationCategories.Sexual, Is.False); + Assert.That(moderationCategories.SexualMinors, Is.False); + Assert.That(moderationCategories.Violence, Is.False); + Assert.That(moderationCategories.ViolenceGraphic, Is.False); + } + + [Test] + public void ModerationCategoriesWithSelfHarmInstructionWorks() + { + ModerationCategories moderationCategories = OpenAIModerationsModelFactory.ModerationCategories(selfHarmInstructions: true); + + Assert.That(moderationCategories.Hate, Is.False); + Assert.That(moderationCategories.HateThreatening, Is.False); + Assert.That(moderationCategories.Harassment, Is.False); + Assert.That(moderationCategories.HarassmentThreatening, Is.False); + Assert.That(moderationCategories.SelfHarm, Is.False); + Assert.That(moderationCategories.SelfHarmIntent, Is.False); + Assert.That(moderationCategories.SelfHarmInstructions, Is.True); + Assert.That(moderationCategories.Sexual, Is.False); + Assert.That(moderationCategories.SexualMinors, Is.False); + Assert.That(moderationCategories.Violence, Is.False); + Assert.That(moderationCategories.ViolenceGraphic, Is.False); + } + + [Test] + public void ModerationCategoriesWithSexualWorks() + { + ModerationCategories moderationCategories = OpenAIModerationsModelFactory.ModerationCategories(sexual: true); + + Assert.That(moderationCategories.Hate, Is.False); + Assert.That(moderationCategories.HateThreatening, Is.False); + Assert.That(moderationCategories.Harassment, Is.False); + Assert.That(moderationCategories.HarassmentThreatening, Is.False); + Assert.That(moderationCategories.SelfHarm, Is.False); + Assert.That(moderationCategories.SelfHarmIntent, Is.False); + Assert.That(moderationCategories.SelfHarmInstructions, Is.False); + Assert.That(moderationCategories.Sexual, Is.True); + Assert.That(moderationCategories.SexualMinors, Is.False); + Assert.That(moderationCategories.Violence, Is.False); + Assert.That(moderationCategories.ViolenceGraphic, Is.False); + } + + [Test] + public void ModerationCategoriesWithSexualMinorsWorks() + { + ModerationCategories moderationCategories = OpenAIModerationsModelFactory.ModerationCategories(sexualMinors: true); + + Assert.That(moderationCategories.Hate, Is.False); + Assert.That(moderationCategories.HateThreatening, Is.False); + Assert.That(moderationCategories.Harassment, Is.False); + Assert.That(moderationCategories.HarassmentThreatening, Is.False); + Assert.That(moderationCategories.SelfHarm, Is.False); + Assert.That(moderationCategories.SelfHarmIntent, Is.False); + Assert.That(moderationCategories.SelfHarmInstructions, Is.False); + Assert.That(moderationCategories.Sexual, Is.False); + Assert.That(moderationCategories.SexualMinors, Is.True); + Assert.That(moderationCategories.Violence, Is.False); + Assert.That(moderationCategories.ViolenceGraphic, Is.False); + } + + [Test] + public void ModerationCategoriesWithViolenceWorks() + { + ModerationCategories moderationCategories = OpenAIModerationsModelFactory.ModerationCategories(violence: true); + + Assert.That(moderationCategories.Hate, Is.False); + Assert.That(moderationCategories.HateThreatening, Is.False); + Assert.That(moderationCategories.Harassment, Is.False); + Assert.That(moderationCategories.HarassmentThreatening, Is.False); + Assert.That(moderationCategories.SelfHarm, Is.False); + Assert.That(moderationCategories.SelfHarmIntent, Is.False); + Assert.That(moderationCategories.SelfHarmInstructions, Is.False); + Assert.That(moderationCategories.Sexual, Is.False); + Assert.That(moderationCategories.SexualMinors, Is.False); + Assert.That(moderationCategories.Violence, Is.True); + Assert.That(moderationCategories.ViolenceGraphic, Is.False); + } + + [Test] + public void ModerationCategoriesWithViolenceGraphicWorks() + { + ModerationCategories moderationCategories = OpenAIModerationsModelFactory.ModerationCategories(violenceGraphic: true); + + Assert.That(moderationCategories.Hate, Is.False); + Assert.That(moderationCategories.HateThreatening, Is.False); + Assert.That(moderationCategories.Harassment, Is.False); + Assert.That(moderationCategories.HarassmentThreatening, Is.False); + Assert.That(moderationCategories.SelfHarm, Is.False); + Assert.That(moderationCategories.SelfHarmIntent, Is.False); + Assert.That(moderationCategories.SelfHarmInstructions, Is.False); + Assert.That(moderationCategories.Sexual, Is.False); + Assert.That(moderationCategories.SexualMinors, Is.False); + Assert.That(moderationCategories.Violence, Is.False); + Assert.That(moderationCategories.ViolenceGraphic, Is.True); + } + + [Test] + public void ModerationCategoryScoresWithNoPropertiesWorks() + { + ModerationCategoryScores moderationCategoryScores = OpenAIModerationsModelFactory.ModerationCategoryScores(); + + Assert.That(moderationCategoryScores.Hate, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HateThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Harassment, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HarassmentThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarm, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmIntent, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmInstructions, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Sexual, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SexualMinors, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Violence, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.ViolenceGraphic, Is.EqualTo(0f)); + } + + [Test] + public void ModerationCategoryScoresWithHateWorks() + { + float hate = 0.85f; + ModerationCategoryScores moderationCategoryScores = OpenAIModerationsModelFactory.ModerationCategoryScores(hate: hate); + + Assert.That(moderationCategoryScores.Hate, Is.EqualTo(hate)); + Assert.That(moderationCategoryScores.HateThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Harassment, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HarassmentThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarm, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmIntent, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmInstructions, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Sexual, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SexualMinors, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Violence, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.ViolenceGraphic, Is.EqualTo(0f)); + } + + [Test] + public void ModerationCategoryScoresWithHateThreateningWorks() + { + float hateThreatening = 0.85f; + ModerationCategoryScores moderationCategoryScores = OpenAIModerationsModelFactory.ModerationCategoryScores(hateThreatening: hateThreatening); + + Assert.That(moderationCategoryScores.Hate, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HateThreatening, Is.EqualTo(hateThreatening)); + Assert.That(moderationCategoryScores.Harassment, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HarassmentThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarm, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmIntent, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmInstructions, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Sexual, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SexualMinors, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Violence, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.ViolenceGraphic, Is.EqualTo(0f)); + } + + [Test] + public void ModerationCategoryScoresWithHarassmentWorks() + { + float harassment = 0.85f; + ModerationCategoryScores moderationCategoryScores = OpenAIModerationsModelFactory.ModerationCategoryScores(harassment: harassment); + + Assert.That(moderationCategoryScores.Hate, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HateThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Harassment, Is.EqualTo(harassment)); + Assert.That(moderationCategoryScores.HarassmentThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarm, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmIntent, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmInstructions, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Sexual, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SexualMinors, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Violence, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.ViolenceGraphic, Is.EqualTo(0f)); + } + + [Test] + public void ModerationCategoryScoresWithHarassmentThreateningWorks() + { + float harassmentThreatening = 0.85f; + ModerationCategoryScores moderationCategoryScores = OpenAIModerationsModelFactory.ModerationCategoryScores(harassmentThreatening: harassmentThreatening); + + Assert.That(moderationCategoryScores.Hate, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HateThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Harassment, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HarassmentThreatening, Is.EqualTo(harassmentThreatening)); + Assert.That(moderationCategoryScores.SelfHarm, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmIntent, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmInstructions, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Sexual, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SexualMinors, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Violence, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.ViolenceGraphic, Is.EqualTo(0f)); + } + + [Test] + public void ModerationCategoryScoresWithSelfHarmWorks() + { + float selfHarm = 0.85f; + ModerationCategoryScores moderationCategoryScores = OpenAIModerationsModelFactory.ModerationCategoryScores(selfHarm: selfHarm); + + Assert.That(moderationCategoryScores.Hate, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HateThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Harassment, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HarassmentThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarm, Is.EqualTo(selfHarm)); + Assert.That(moderationCategoryScores.SelfHarmIntent, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmInstructions, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Sexual, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SexualMinors, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Violence, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.ViolenceGraphic, Is.EqualTo(0f)); + } + + [Test] + public void ModerationCategoryScoresWithSelfHarmIntentWorks() + { + float selfHarmIntent = 0.85f; + ModerationCategoryScores moderationCategoryScores = OpenAIModerationsModelFactory.ModerationCategoryScores(selfHarmIntent: selfHarmIntent); + + Assert.That(moderationCategoryScores.Hate, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HateThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Harassment, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HarassmentThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarm, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmIntent, Is.EqualTo(selfHarmIntent)); + Assert.That(moderationCategoryScores.SelfHarmInstructions, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Sexual, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SexualMinors, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Violence, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.ViolenceGraphic, Is.EqualTo(0f)); + } + + [Test] + public void ModerationCategoryScoresWithSelfHarmInstructionWorks() + { + float selfHarmInstructions = 0.85f; + ModerationCategoryScores moderationCategoryScores = OpenAIModerationsModelFactory.ModerationCategoryScores(selfHarmInstructions: selfHarmInstructions); + + Assert.That(moderationCategoryScores.Hate, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HateThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Harassment, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HarassmentThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarm, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmIntent, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmInstructions, Is.EqualTo(selfHarmInstructions)); + Assert.That(moderationCategoryScores.Sexual, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SexualMinors, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Violence, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.ViolenceGraphic, Is.EqualTo(0f)); + } + + [Test] + public void ModerationCategoryScoresWithSexualWorks() + { + float sexual = 0.85f; + ModerationCategoryScores moderationCategoryScores = OpenAIModerationsModelFactory.ModerationCategoryScores(sexual: sexual); + + Assert.That(moderationCategoryScores.Hate, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HateThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Harassment, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HarassmentThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarm, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmIntent, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmInstructions, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Sexual, Is.EqualTo(sexual)); + Assert.That(moderationCategoryScores.SexualMinors, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Violence, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.ViolenceGraphic, Is.EqualTo(0f)); + } + + [Test] + public void ModerationCategoryScoresWithSexualMinorsWorks() + { + float sexualMinors = 0.85f; + ModerationCategoryScores moderationCategoryScores = OpenAIModerationsModelFactory.ModerationCategoryScores(sexualMinors: sexualMinors); + + Assert.That(moderationCategoryScores.Hate, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HateThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Harassment, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HarassmentThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarm, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmIntent, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmInstructions, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Sexual, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SexualMinors, Is.EqualTo(sexualMinors)); + Assert.That(moderationCategoryScores.Violence, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.ViolenceGraphic, Is.EqualTo(0f)); + } + + [Test] + public void ModerationCategoryScoresWithViolenceWorks() + { + float violence = 0.85f; + ModerationCategoryScores moderationCategoryScores = OpenAIModerationsModelFactory.ModerationCategoryScores(violence: violence); + + Assert.That(moderationCategoryScores.Hate, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HateThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Harassment, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HarassmentThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarm, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmIntent, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmInstructions, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Sexual, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SexualMinors, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Violence, Is.EqualTo(violence)); + Assert.That(moderationCategoryScores.ViolenceGraphic, Is.EqualTo(0f)); + } + + [Test] + public void ModerationCategoryScoresWithViolenceGraphicWorks() + { + float violenceGraphic = 0.85f; + ModerationCategoryScores moderationCategoryScores = OpenAIModerationsModelFactory.ModerationCategoryScores(violenceGraphic: violenceGraphic); + + Assert.That(moderationCategoryScores.Hate, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HateThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Harassment, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.HarassmentThreatening, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarm, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmIntent, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SelfHarmInstructions, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Sexual, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.SexualMinors, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.Violence, Is.EqualTo(0f)); + Assert.That(moderationCategoryScores.ViolenceGraphic, Is.EqualTo(violenceGraphic)); + } + + [Test] + public void ModerationCollectionWithNoPropertiesWorks() + { + ModerationCollection moderationCollection = OpenAIModerationsModelFactory.ModerationCollection(); + + Assert.That(moderationCollection.Id, Is.Null); + Assert.That(moderationCollection.Model, Is.Null); + Assert.That(moderationCollection.Count, Is.EqualTo(0)); + } + + [Test] + public void ModerationCollectionWithIdWorks() + { + string id = "moderationId"; + ModerationCollection moderationCollection = OpenAIModerationsModelFactory.ModerationCollection(id: id); + + Assert.That(moderationCollection.Id, Is.EqualTo(id)); + Assert.That(moderationCollection.Model, Is.Null); + Assert.That(moderationCollection.Count, Is.EqualTo(0)); + } + + [Test] + public void ModerationCollectionWithModelWorks() + { + string model = "supermodel"; + ModerationCollection moderationCollection = OpenAIModerationsModelFactory.ModerationCollection(model: model); + + Assert.That(moderationCollection.Id, Is.Null); + Assert.That(moderationCollection.Model, Is.EqualTo(model)); + Assert.That(moderationCollection.Count, Is.EqualTo(0)); + } + + [Test] + public void ModerationCollectionWithItemsWorks() + { + IEnumerable items = [ + OpenAIModerationsModelFactory.ModerationResult(flagged: true), + OpenAIModerationsModelFactory.ModerationResult(flagged: false) + ]; + ModerationCollection moderationCollection = OpenAIModerationsModelFactory.ModerationCollection(items: items); + + Assert.That(moderationCollection.Id, Is.Null); + Assert.That(moderationCollection.Model, Is.Null); + Assert.That(moderationCollection.SequenceEqual(items), Is.True); + } + + [Test] + public void ModerationResultWithNoPropertiesWorks() + { + ModerationResult moderationResult = OpenAIModerationsModelFactory.ModerationResult(); + + Assert.That(moderationResult.Flagged, Is.False); + Assert.That(moderationResult.Categories, Is.Null); + Assert.That(moderationResult.CategoryScores, Is.Null); + } + + [Test] + public void ModerationResultWithFlaggedWorks() + { + ModerationResult moderationResult = OpenAIModerationsModelFactory.ModerationResult(flagged: true); + + Assert.That(moderationResult.Flagged, Is.True); + Assert.That(moderationResult.Categories, Is.Null); + Assert.That(moderationResult.CategoryScores, Is.Null); + } + + [Test] + public void ModerationResultWithCategoriesWorks() + { + ModerationCategories categories = OpenAIModerationsModelFactory.ModerationCategories(hate: true); + ModerationResult moderationResult = OpenAIModerationsModelFactory.ModerationResult(categories: categories); + + Assert.That(moderationResult.Flagged, Is.False); + Assert.That(moderationResult.Categories, Is.EqualTo(categories)); + Assert.That(moderationResult.CategoryScores, Is.Null); + } + + [Test] + public void ModerationResultWithCategoryScoresWorks() + { + ModerationCategoryScores categoryScores = OpenAIModerationsModelFactory.ModerationCategoryScores(hate: 0.85f); + ModerationResult moderationResult = OpenAIModerationsModelFactory.ModerationResult(categoryScores: categoryScores); + + Assert.That(moderationResult.Flagged, Is.False); + Assert.That(moderationResult.Categories, Is.Null); + Assert.That(moderationResult.CategoryScores, Is.EqualTo(categoryScores)); + } +}