public IUnifiedTestOperation CreateOperation(string operationName, string targetEntityId, BsonDocument operationArguments) { switch (targetEntityId) { case "testRunner": switch (operationName) { case "assertCollectionExists": return(new UnifiedAssertCollectionExistsOperationBuilder().Build(operationArguments)); case "assertCollectionNotExists": return(new UnifiedAssertCollectionNotExistsOperationBuilder().Build(operationArguments)); case "assertDifferentLsidOnLastTwoCommands": return(new UnifiedAssertDifferentLsidOnLastTwoCommandsOperationBuilder(_entityMap).Build(operationArguments)); case "assertIndexExists": return(new UnifiedAssertIndexExistsOperationBuilder().Build(operationArguments)); case "assertIndexNotExists": return(new UnifiedAssertIndexNotExistsOperationBuilder().Build(operationArguments)); case "assertSameLsidOnLastTwoCommands": return(new UnifiedAssertSameLsidOnLastTwoCommandsOperationBuilder(_entityMap).Build(operationArguments)); case "assertSessionDirty": return(new UnifiedAssertSessionDirtyOperationBuilder(_entityMap).Build(operationArguments)); case "assertSessionNotDirty": return(new UnifiedAssertSessionNotDirtyOperationBuilder(_entityMap).Build(operationArguments)); case "assertSessionPinned": return(new UnifiedAssertSessionPinnedOperationBuilder(_entityMap).Build(operationArguments)); case "assertSessionTransactionState": return(new UnifiedAssertSessionTransactionStateOperationBuilder(_entityMap).Build(operationArguments)); case "assertSessionUnpinned": return(new UnifiedAssertSessionUnpinnedOperationBuilder(_entityMap).Build(operationArguments)); case "failPoint": return(new UnifiedFailPointOperationBuilder(_entityMap).Build(operationArguments)); case "targetedFailPoint": return(new UnifiedTargetedFailPointOperationBuilder(_entityMap).Build(operationArguments)); default: throw new FormatException($"Invalid method name: '{operationName}'."); } case var _ when _entityMap.HasBucket(targetEntityId): switch (operationName) { case "delete": return(new UnifiedGridFsDeleteOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); case "download": return(new UnifiedGridFsDownloadOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); case "upload": return(new UnifiedGridFsUploadOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); default: throw new FormatException($"Invalid method name: '{operationName}'."); } case var _ when _entityMap.HasChangeStream(targetEntityId): switch (operationName) { case "iterateUntilDocumentOrError": return(new UnifiedIterateUntilDocumentOrErrorOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); default: throw new FormatException($"Invalid method name: '{operationName}'."); } case var _ when _entityMap.HasClient(targetEntityId): switch (operationName) { case "createChangeStream": return(new UnifiedCreateChangeStreamOnClientOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); case "listDatabases": return(new UnifiedListDatabasesOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); default: throw new FormatException($"Invalid method name: '{operationName}'."); } case var _ when _entityMap.HasCollection(targetEntityId): switch (operationName) { case "aggregate": return(new UnifiedAggregateOnCollectionOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); case "bulkWrite": return(new UnifiedBulkWriteOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); case "createChangeStream": return(new UnifiedCreateChangeStreamOnCollectionOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); case "createIndex": return(new UnifiedCreateIndexOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); case "deleteOne": return(new UnifiedDeleteOneOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); case "find": return(new UnifiedFindOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); case "findOneAndUpdate": return(new UnifiedFindOneAndUpdateOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); case "insertMany": return(new UnifiedInsertManyOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); case "insertOne": return(new UnifiedInsertOneOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); case "replaceOne": return(new UnifiedReplaceOneOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); default: throw new FormatException($"Invalid method name: '{operationName}'."); } case var _ when _entityMap.HasDatabase(targetEntityId): switch (operationName) { case "aggregate": return(new UnifiedAggregateOnDatabaseOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); case "createCollection": return(new UnifiedCreateCollectionOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); case "dropCollection": return(new UnifiedDropCollectionOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); default: throw new FormatException($"Invalid method name: '{operationName}'."); } case var _ when _entityMap.HasSession(targetEntityId): switch (operationName) { case "abortTransaction": return(new UnifiedAbortTransactionOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); case "commitTransaction": return(new UnifiedCommitTransactionOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); case "endSession": return(new UnifiedEndSessionOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); case "startTransaction": return(new UnifiedStartTransactionOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); case "withTransaction": return(new UnifiedWithTransactionOperationBuilder(_entityMap).Build(targetEntityId, operationArguments)); default: throw new FormatException($"Invalid method name: '{operationName}'."); } default: throw new FormatException($"Target entity type not recognized for entity with id: '{targetEntityId}'."); } }