Skip to content

Remove .ai-team folder from git tracking and add to .gitignore

98251db
Select commit
Loading
Failed to load commit list.
Sign in for the full log view
Merged

Migrates AI services to Agent Framework #94

Remove .ai-team folder from git tracking and add to .gitignore
98251db
Select commit
Loading
Failed to load commit list.
GitHub Actions / .NET Tests succeeded Feb 15, 2026 in 0s

189 passed, 0 failed and 0 skipped

Tests passed successfully

Report Passed Failed Skipped Time
./TestResults/_runnervmjduv7_2026-02-15_02_02_44.trx 158✅ 28s
./TestResults/_runnervmjduv7_2026-02-15_02_02_46.trx 31✅ 5s

✅ ./TestResults/_runnervmjduv7_2026-02-15_02_02_44.trx

158 tests were completed in 28s with 158 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
NoteBookmark.Api.Tests.Domain.ContainsPlaceholderAttributeTests 14✅ 8ms
NoteBookmark.Api.Tests.Domain.DateOnlyJsonConverterTests 12✅ 47ms
NoteBookmark.Api.Tests.Domain.NoteCategoriesTests 20✅ 9ms
NoteBookmark.Api.Tests.Domain.NoteTests 9✅ 3ms
NoteBookmark.Api.Tests.Domain.PostLTests 4✅ 3ms
NoteBookmark.Api.Tests.Domain.PostSuggestionTests 5✅ 2ms
NoteBookmark.Api.Tests.Domain.PostTests 5✅ 2ms
NoteBookmark.Api.Tests.Domain.ReadingNotesTests 4✅ 61ms
NoteBookmark.Api.Tests.Domain.ReadingNoteTests 7✅ 6ms
NoteBookmark.Api.Tests.Domain.SearchCriteriasTests 10✅ 4ms
NoteBookmark.Api.Tests.Domain.SettingsTests 9✅ 1ms
NoteBookmark.Api.Tests.Domain.SummaryTests 2✅ 4ms
NoteBookmark.Api.Tests.Endpoints.NoteEndpointsTests 14✅ 1s
NoteBookmark.Api.Tests.Endpoints.PostEndpointsTests 10✅ 1s
NoteBookmark.Api.Tests.Endpoints.SettingEndpointsTests 7✅ 446ms
NoteBookmark.Api.Tests.Integration.NoteBookmarkWorkflowTests 7✅ 549ms
NoteBookmark.Api.Tests.Services.DataStorageServiceTests 19✅ 267ms

✅ NoteBookmark.Api.Tests.Domain.ContainsPlaceholderAttributeTests

✅ Constructor_ShouldSetPlaceholder
✅ ErrorMessage_ShouldContainPlaceholderName
✅ IsValid_ShouldReturnError_WhenValueDoesNotContainPlaceholder
✅ IsValid_ShouldReturnSuccess_WhenValueContainsPlaceholder
✅ IsValid_ShouldReturnSuccess_WhenValueIsEmpty
✅ IsValid_ShouldReturnSuccess_WhenValueIsNull
✅ IsValid_ShouldReturnSuccess_WhenValueIsWhitespace
✅ IsValid_ShouldValidateCorrectly_ForVariousInputs(value: "Multiple {var1} and {var2}", placeholder: "var1", shouldBeValid: True)
✅ IsValid_ShouldValidateCorrectly_ForVariousInputs(value: "Multiple {var1} and {var2}", placeholder: "var2", shouldBeValid: True)
✅ IsValid_ShouldValidateCorrectly_ForVariousInputs(value: "Multiple var1 and var2", placeholder: "var1", shouldBeValid: False)
✅ IsValid_ShouldValidateCorrectly_ForVariousInputs(value: "Summary of {content}", placeholder: "content", shouldBeValid: True)
✅ IsValid_ShouldValidateCorrectly_ForVariousInputs(value: "Summary of content", placeholder: "content", shouldBeValid: False)
✅ IsValid_ShouldValidateCorrectly_ForVariousInputs(value: "Use {topic} for search", placeholder: "topic", shouldBeValid: True)
✅ IsValid_ShouldValidateCorrectly_ForVariousInputs(value: "Use topic for search", placeholder: "topic", shouldBeValid: False)

✅ NoteBookmark.Api.Tests.Domain.DateOnlyJsonConverterTests

✅ DateConverter_ShouldFormatWithYearMonthDay
✅ Read_ShouldHandleArray_ReturnNull
✅ Read_ShouldHandleBoolean_ReturnStringRepresentation
✅ Read_ShouldHandleEmptyString
✅ Read_ShouldHandleFullDateTime
✅ Read_ShouldHandleInvalidDateString_ReturnOriginal
✅ Read_ShouldHandleNull
✅ Read_ShouldHandleNumber_ParseAsTimestamp
✅ Read_ShouldHandleObject_ReturnNull
✅ Read_ShouldParseValidDate
✅ Write_ShouldWriteNull
✅ Write_ShouldWriteValue

✅ NoteBookmark.Api.Tests.Domain.NoteCategoriesTests

✅ GetCategories_ShouldReturnAllCategories
✅ GetCategories_ShouldReturnListType
✅ GetCategory_ShouldBeCaseInsensitive
✅ GetCategory_ShouldReturnCorrectCategory_ForValidInput(input: "ai", expected: "AI")
✅ GetCategory_ShouldReturnCorrectCategory_ForValidInput(input: "AI", expected: "AI")
✅ GetCategory_ShouldReturnCorrectCategory_ForValidInput(input: "cloud", expected: "Cloud")
✅ GetCategory_ShouldReturnCorrectCategory_ForValidInput(input: "CLOUD", expected: "Cloud")
✅ GetCategory_ShouldReturnCorrectCategory_ForValidInput(input: "data", expected: "Data")
✅ GetCategory_ShouldReturnCorrectCategory_ForValidInput(input: "database", expected: "Databases")
✅ GetCategory_ShouldReturnCorrectCategory_ForValidInput(input: "del", expected: "del")
✅ GetCategory_ShouldReturnCorrectCategory_ForValidInput(input: "dev", expected: "Programming")
✅ GetCategory_ShouldReturnCorrectCategory_ForValidInput(input: "devops", expected: "DevOps")
✅ GetCategory_ShouldReturnCorrectCategory_ForValidInput(input: "lowcode", expected: "LowCode")
✅ GetCategory_ShouldReturnCorrectCategory_ForValidInput(input: "misc", expected: "Miscellaneous")
✅ GetCategory_ShouldReturnCorrectCategory_ForValidInput(input: "oss", expected: "Open Source")
✅ GetCategory_ShouldReturnCorrectCategory_ForValidInput(input: "top", expected: "Suggestion of the week")
✅ GetCategory_ShouldReturnMiscellaneous_ForInvalidCategory(input: "")
✅ GetCategory_ShouldReturnMiscellaneous_ForInvalidCategory(input: "invalid")
✅ GetCategory_ShouldReturnMiscellaneous_ForInvalidCategory(input: "unknown")
✅ GetCategory_ShouldReturnMiscellaneous_ForNullInput

✅ NoteBookmark.Api.Tests.Domain.NoteTests

✅ Note_Constructor_ShouldInitializeDateAdded_WithCurrentUtcTime
✅ Note_Constructor_ShouldInitializePartitionKey_WithCurrentYearMonth
✅ Note_Constructor_ShouldInitializeRowKey_WithValidGuid
✅ Note_WhenCreated_HasCorrectDefaultValues
✅ Note_WhenPropertiesSet_ReturnsCorrectValues
✅ Validate_ShouldReturnFalse_WhenCommentIsEmpty
✅ Validate_ShouldReturnFalse_WhenCommentIsNull
✅ Validate_ShouldReturnFalse_WhenCommentIsWhitespace
✅ Validate_ShouldReturnTrue_WhenCommentIsNotEmpty

✅ NoteBookmark.Api.Tests.Domain.PostLTests

✅ PostL_Note_CanBeEmptyString
✅ PostL_NoteId_CanBeEmptyString
✅ PostL_WhenCreated_HasCorrectDefaultValues
✅ PostL_WhenPropertiesSet_ReturnsCorrectValues

✅ NoteBookmark.Api.Tests.Domain.PostSuggestionTests

✅ PostSuggestion_RoundTrip_ShouldMaintainValues
✅ PostSuggestion_ShouldDeserializeFromJson
✅ PostSuggestion_ShouldHandleNullAuthor
✅ PostSuggestion_ShouldHandleNullPublicationDate
✅ PostSuggestion_ShouldSerializeToJson

✅ NoteBookmark.Api.Tests.Domain.PostTests

✅ Post_is_read_CanBeSetToAnyBooleanValue(readStatus: False)
✅ Post_is_read_CanBeSetToAnyBooleanValue(readStatus: null)
✅ Post_is_read_CanBeSetToAnyBooleanValue(readStatus: True)
✅ Post_WhenCreated_HasCorrectDefaultValues
✅ Post_WhenPropertiesSet_ReturnsCorrectValues

✅ NoteBookmark.Api.Tests.Domain.ReadingNotesTests

✅ ReadingNotes_CanAddNotesToCategories
✅ ReadingNotes_GetAllUniqueTags_ReturnsDistinctTags
✅ ReadingNotes_WhenCreated_HasCorrectDefaultValues
✅ ReadingNotes_WhenPropertiesSet_ReturnsCorrectValues

✅ NoteBookmark.Api.Tests.Domain.ReadingNoteTests

✅ ReadingNote_WhenCreated_HasCorrectDefaultValues
✅ ReadingNote_WhenPropertiesSet_ReturnsCorrectValues
✅ ToMarkDown_ShouldGenerateCorrectMarkdown_WithAllProperties
✅ ToMarkDown_ShouldHandleMissingAuthor
✅ ToMarkDown_ShouldHandleMissingTitle
✅ ToMarkDown_ShouldHandleMissingUrl
✅ ToMarkDown_ShouldStartWithNewLineAndHyphen

✅ NoteBookmark.Api.Tests.Domain.SearchCriteriasTests

✅ Constructor_ShouldSetSearchPrompt
✅ GetSearchPrompt_ShouldHandleEmptySearchTopic
✅ GetSearchPrompt_ShouldHandleNullSearchTopic
✅ GetSearchPrompt_ShouldReplaceTopicPlaceholder
✅ GetSplittedAllowedDomains_ShouldHandleSingleDomain
✅ GetSplittedAllowedDomains_ShouldReturnNull_WhenAllowedDomainsIsNull
✅ GetSplittedAllowedDomains_ShouldSplitAndTrim_WhenAllowedDomainsProvided
✅ GetSplittedBlockedDomains_ShouldReturnNull_WhenBlockedDomainsIsNull
✅ GetSplittedBlockedDomains_ShouldSplitAndTrim_WhenBlockedDomainsProvided
✅ Properties_ShouldBeSettable

✅ NoteBookmark.Api.Tests.Domain.SettingsTests

✅ Settings_LastBookmarkDate_CanStoreVariousDateFormats(dateString: "2023-12-25T00:00:00")
✅ Settings_LastBookmarkDate_CanStoreVariousDateFormats(dateString: "2024-01-01T12:00:00Z")
✅ Settings_LastBookmarkDate_CanStoreVariousDateFormats(dateString: "2025-06-03T15:30:00")
✅ Settings_ReadingNotesCounter_CanStoreVariousCounterValues(counter: "0")
✅ Settings_ReadingNotesCounter_CanStoreVariousCounterValues(counter: "1")
✅ Settings_ReadingNotesCounter_CanStoreVariousCounterValues(counter: "1000")
✅ Settings_ReadingNotesCounter_CanStoreVariousCounterValues(counter: "999")
✅ Settings_WhenCreated_HasCorrectDefaultValues
✅ Settings_WhenPropertiesSet_ReturnsCorrectValues

✅ NoteBookmark.Api.Tests.Domain.SummaryTests

✅ Summary_WhenCreated_HasCorrectDefaultValues
✅ Summary_WhenPropertiesSet_ReturnsCorrectValues

✅ NoteBookmark.Api.Tests.Endpoints.NoteEndpointsTests

✅ CreateNote_WithInvalidNote_ReturnsBadRequest
✅ CreateNote_WithValidNote_MarksRelatedPostAsRead
✅ CreateNote_WithValidNote_ReturnsCreated
✅ DeleteNote_WithInvalidNoteId_ReturnsNotFound
✅ DeleteNote_WithValidNoteId_ReturnsOk
✅ GetNote_WithInvalidNoteId_ReturnsNotFound
✅ GetNote_WithValidNoteId_ReturnsNote
✅ GetNotes_ReturnsAllNotes
✅ GetNotesForSummary_WithInvalidReadingNotesId_ReturnsEmptyList
✅ GetNotesForSummary_WithValidReadingNotesId_ReturnsFilteredNotes
✅ SaveReadingNotes_WithValidReadingNotes_ReturnsOkWithUrl
✅ UpdateNote_WithInvalidNote_ReturnsBadRequest
✅ UpdateNote_WithValidNote_ReturnsOk
✅ UpdatePostReadStatus_UpdatesAllPostsWithNotes

✅ NoteBookmark.Api.Tests.Endpoints.PostEndpointsTests

✅ DeletePost_WhenPostDoesNotExist_ReturnsNotFound
✅ DeletePost_WhenPostExists_ReturnsOk
✅ ExtractPostDetails_WithInvalidUrl_ReturnsBadRequest
✅ ExtractPostDetails_WithValidUrl_ReturnsOkWithPost
✅ GetPost_WhenPostDoesNotExist_ReturnsNotFound
✅ GetPost_WhenPostExists_ReturnsOkWithPost
✅ GetReadPosts_ReturnsOkWithReadPosts
✅ GetUnreadPosts_ReturnsOkWithUnreadPosts
✅ SavePost_WithInvalidPost_ReturnsBadRequest
✅ SavePost_WithValidPost_ReturnsOk

✅ NoteBookmark.Api.Tests.Endpoints.SettingEndpointsTests

✅ GetNextReadingNotesCounter_ReturnsValidCounter
✅ GetNextReadingNotesCounter_WhenNoSettings_ReturnsDefaultCounter
✅ GetSettings_ReturnsOkWithSettings
✅ SaveSettings_ThenGetSettings_ReturnsUpdatedSettings
✅ SaveSettings_WithInvalidSettings_ReturnsBadRequest
✅ SaveSettings_WithValidSettings_ReturnsOk
✅ SettingsEndpoints_IntegrationFlow_WorksCorrectly

✅ NoteBookmark.Api.Tests.Integration.NoteBookmarkWorkflowTests

✅ CompleteWorkflow_CreatePostAddNoteGenerateSummary_WorksCorrectly
✅ MultipleNotesForSameReadingNotes_WorksCorrectly
✅ PostDeletionWorkflow_DeletePost_WorksCorrectly
✅ PostFilteringWorkflow_ReadAndUnreadPosts_WorksCorrectly
✅ ReadingNotesWorkflow_SaveAndRetrieve_WorksCorrectly
✅ SettingsWorkflow_UpdateCounter_WorksCorrectly
✅ UpdatePostReadStatusWorkflow_UpdatesCorrectly

✅ NoteBookmark.Api.Tests.Services.DataStorageServiceTests

✅ CreateNote_WhenExistingNote_UpdatesNoteSuccessfully
✅ CreateNote_WhenNewNote_AddsNoteSuccessfully
✅ DeletePost_WhenPostDoesNotExist_ReturnsFalse
✅ DeletePost_WhenPostExists_DeletesSuccessfully
✅ GetFilteredPosts_WithUnreadFilter_ReturnsOnlyUnreadPosts
✅ GetNotesForSummary_WithValidReadingNotesId_ReturnsReadingNotes
✅ GetPost_WhenPostDoesNotExist_ReturnsNull
✅ GetPost_WhenPostExists_ReturnsPost
✅ GetReadingNotes_WhenExists_ReturnsReadingNotes
✅ GetSettings_WhenNoSettings_ReturnsDefaultSettings
✅ GetSettings_WhenSettingsExist_ReturnsSettings
✅ GetSummaries_ReturnsAllSummaries
✅ SavePost_WhenExistingPost_UpdatesPostSuccessfully
✅ SavePost_WhenNewPost_AddsPostSuccessfully
✅ SaveReadingNotes_ValidReadingNotes_SavesSuccessfully
✅ SaveReadingNotesMarkdown_ValidMarkdown_SavesSuccessfully
✅ SaveSettings_WhenNewSettings_SavesSuccessfully
✅ SaveSummary_NewSummary_SavesSuccessfully
✅ UpdatePostReadStatus_UpdatesAllPostsWithNotes

✅ ./TestResults/_runnervmjduv7_2026-02-15_02_02_46.trx

31 tests were completed in 5s with 31 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
NoteBookmark.AIServices.Tests.ResearchServiceTests 14✅ 3s
NoteBookmark.AIServices.Tests.SummaryServiceTests 17✅ 3s

✅ NoteBookmark.AIServices.Tests.ResearchServiceTests

✅ SearchSuggestionsAsync_ApiKeyPriority_AppSettingsOverridesEnvVar
✅ SearchSuggestionsAsync_OnException_ReturnsEmptyPostSuggestions
✅ SearchSuggestionsAsync_WithApiKeyFromAppSettings_UsesCorrectValue
✅ SearchSuggestionsAsync_WithApiKeyFromRekaEnvVar_UsesCorrectValue
✅ SearchSuggestionsAsync_WithCustomBaseUrl_UsesProvidedUrl
✅ SearchSuggestionsAsync_WithCustomModelName_UsesProvidedModel
✅ SearchSuggestionsAsync_WithDefaultBaseUrl_UsesRekaApi
✅ SearchSuggestionsAsync_WithDefaultModelName_UsesRekaFlashResearch
✅ SearchSuggestionsAsync_WithEmptyApiKey_ThrowsInvalidOperationException(emptyKey: "   ")
✅ SearchSuggestionsAsync_WithEmptyApiKey_ThrowsInvalidOperationException(emptyKey: "")
✅ SearchSuggestionsAsync_WithInvalidUrl_ReturnsEmptyPostSuggestions
✅ SearchSuggestionsAsync_WithMissingApiKey_LogsError
✅ SearchSuggestionsAsync_WithMissingApiKey_ThrowsInvalidOperationException
✅ SearchSuggestionsAsync_WithValidSearchCriterias_ProcessesPrompt

✅ NoteBookmark.AIServices.Tests.SummaryServiceTests

✅ GenerateSummaryAsync_ApiKeyPriority_AppSettingsOverridesEnvVar
✅ GenerateSummaryAsync_OnException_ReturnsEmptyString
✅ GenerateSummaryAsync_WithApiKeyFromAppSettings_UsesCorrectValue
✅ GenerateSummaryAsync_WithApiKeyFromRekaEnvVar_UsesCorrectValue
✅ GenerateSummaryAsync_WithCustomBaseUrl_UsesProvidedUrl
✅ GenerateSummaryAsync_WithCustomModelName_UsesProvidedModel
✅ GenerateSummaryAsync_WithDefaultBaseUrl_UsesRekaApi
✅ GenerateSummaryAsync_WithDefaultModelName_UsesRekaFlash31
✅ GenerateSummaryAsync_WithEmptyApiKey_ReturnsEmptyString(emptyKey: "   ")
✅ GenerateSummaryAsync_WithEmptyApiKey_ReturnsEmptyString(emptyKey: "")
✅ GenerateSummaryAsync_WithInvalidUrl_ReturnsEmptyString
✅ GenerateSummaryAsync_WithMissingApiKey_LogsError
✅ GenerateSummaryAsync_WithMissingApiKey_ReturnsEmptyString
✅ GenerateSummaryAsync_WithNullPrompt_HandlesGracefully
✅ GenerateSummaryAsync_WithVariousPrompts_HandlesCorrectly(prompt: "Multi\nline\nprompt")
✅ GenerateSummaryAsync_WithVariousPrompts_HandlesCorrectly(prompt: "Short prompt")
✅ GenerateSummaryAsync_WithVariousPrompts_HandlesCorrectly(prompt: "This is a longer prompt that should be processed c"···)