diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 7838c63ed..cc6e0e6d8 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -730,7 +730,7 @@ src/app/components/manage/mail/mail.component.html - 146 + 164 src/app/components/manage/management-list/management-list.component.html @@ -1096,19 +1096,19 @@ src/app/components/manage/mail/mail.component.html - 41 + 59 src/app/components/manage/mail/mail.component.html - 51 + 69 src/app/components/manage/mail/mail.component.html - 108 + 126 src/app/components/manage/mail/mail.component.html - 120 + 138 src/app/components/manage/management-list/management-list.component.html @@ -1406,11 +1406,11 @@ src/app/components/manage/mail/mail.component.html - 23 + 33 src/app/components/manage/mail/mail.component.html - 82 + 100 src/app/components/manage/management-list/management-list.component.html @@ -1505,19 +1505,19 @@ src/app/components/manage/mail/mail.component.html - 42 + 60 src/app/components/manage/mail/mail.component.html - 54 + 72 src/app/components/manage/mail/mail.component.html - 109 + 127 src/app/components/manage/mail/mail.component.html - 123 + 141 src/app/components/manage/management-list/management-list.component.html @@ -1903,11 +1903,11 @@ src/app/components/manage/mail/mail.component.html - 20 + 30 src/app/components/manage/mail/mail.component.html - 78 + 96 src/app/components/manage/management-list/management-list.component.html @@ -2231,11 +2231,11 @@ src/app/components/manage/mail/mail.component.ts - 114 + 160 src/app/components/manage/mail/mail.component.ts - 194 + 240 src/app/components/manage/management-list/management-list.component.ts @@ -2376,7 +2376,7 @@ src/app/components/manage/mail/mail.component.html - 22 + 32 @@ -2434,19 +2434,19 @@ src/app/components/manage/mail/mail.component.html - 40 + 58 src/app/components/manage/mail/mail.component.html - 48 + 66 src/app/components/manage/mail/mail.component.html - 107 + 125 src/app/components/manage/mail/mail.component.html - 117 + 135 src/app/components/manage/management-list/management-list.component.html @@ -2586,11 +2586,11 @@ src/app/components/manage/mail/mail.component.ts - 116 + 162 src/app/components/manage/mail/mail.component.ts - 196 + 242 src/app/components/manage/management-list/management-list.component.ts @@ -3782,7 +3782,7 @@ src/app/components/manage/mail/mail.component.html - 80 + 98 @@ -3804,7 +3804,7 @@ src/app/components/manage/mail/mail.component.html - 96 + 114 src/app/components/manage/workflows/workflows.component.html @@ -5140,11 +5140,11 @@ src/app/components/manage/mail/mail.component.html - 110 + 128 src/app/components/manage/mail/mail.component.html - 128 + 146 src/app/components/manage/workflows/workflows.component.html @@ -5457,7 +5457,7 @@ src/app/components/manage/mail/mail.component.html - 81 + 99 src/app/components/manage/workflows/workflows.component.html @@ -7591,46 +7591,60 @@ 14 + + Connect Gmail Account + + src/app/components/manage/mail/mail.component.html + 18 + + + + Connect Outlook Account + + src/app/components/manage/mail/mail.component.html + 23 + + Server src/app/components/manage/mail/mail.component.html - 21 + 31 No mail accounts defined. src/app/components/manage/mail/mail.component.html - 62 + 80 Mail rules src/app/components/manage/mail/mail.component.html - 70 + 88 Add Rule src/app/components/manage/mail/mail.component.html - 72 + 90 Sort Order src/app/components/manage/mail/mail.component.html - 79 + 97 Disabled src/app/components/manage/mail/mail.component.html - 96 + 114 src/app/components/manage/workflows/workflows.component.html @@ -7641,140 +7655,154 @@ No mail rules defined. src/app/components/manage/mail/mail.component.html - 137 + 155 Error retrieving mail accounts src/app/components/manage/mail/mail.component.ts - 56 + 81 Error retrieving mail rules src/app/components/manage/mail/mail.component.ts - 70 + 95 + + + + OAuth2 authentication success + + src/app/components/manage/mail/mail.component.ts + 103 + + + + OAuth2 authentication failed, see logs for details + + src/app/components/manage/mail/mail.component.ts + 114 Saved account "". src/app/components/manage/mail/mail.component.ts - 92 + 138 Error saving account. src/app/components/manage/mail/mail.component.ts - 104 + 150 Confirm delete mail account src/app/components/manage/mail/mail.component.ts - 112 + 158 This operation will permanently delete this mail account. src/app/components/manage/mail/mail.component.ts - 113 + 159 Deleted mail account src/app/components/manage/mail/mail.component.ts - 122 + 168 Error deleting mail account. src/app/components/manage/mail/mail.component.ts - 132 + 178 Saved rule "". src/app/components/manage/mail/mail.component.ts - 151 + 197 Error saving rule. src/app/components/manage/mail/mail.component.ts - 162 + 208 Rule "" enabled. src/app/components/manage/mail/mail.component.ts - 178 + 224 Rule "" disabled. src/app/components/manage/mail/mail.component.ts - 179 + 225 Error toggling rule. src/app/components/manage/mail/mail.component.ts - 183 + 229 Confirm delete mail rule src/app/components/manage/mail/mail.component.ts - 192 + 238 This operation will permanently delete this mail rule. src/app/components/manage/mail/mail.component.ts - 193 + 239 Deleted mail rule src/app/components/manage/mail/mail.component.ts - 202 + 248 Error deleting mail rule. src/app/components/manage/mail/mail.component.ts - 211 + 257 Permissions updated src/app/components/manage/mail/mail.component.ts - 233 + 279 Error updating permissions src/app/components/manage/mail/mail.component.ts - 238 + 284 src/app/components/manage/management-list/management-list.component.ts diff --git a/src-ui/src/app/components/manage/mail/mail.component.spec.ts b/src-ui/src/app/components/manage/mail/mail.component.spec.ts index 14cd10944..a69feef1b 100644 --- a/src-ui/src/app/components/manage/mail/mail.component.spec.ts +++ b/src-ui/src/app/components/manage/mail/mail.component.spec.ts @@ -13,7 +13,7 @@ import { import { NgSelectModule } from '@ng-select/ng-select' import { of, throwError } from 'rxjs' import { routes } from 'src/app/app-routing.module' -import { MailAccount } from 'src/app/data/mail-account' +import { MailAccount, MailAccountType } from 'src/app/data/mail-account' import { MailRule } from 'src/app/data/mail-rule' import { IfOwnerDirective } from 'src/app/directives/if-owner.directive' import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive' @@ -44,10 +44,13 @@ import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { SwitchComponent } from '../../common/input/switch/switch.component' import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http' import { By } from '@angular/platform-browser' +import { ActivatedRoute, convertToParamMap } from '@angular/router' +import { SettingsService } from 'src/app/services/settings.service' const mailAccounts = [ - { id: 1, name: 'account1' }, - { id: 2, name: 'account2' }, + { id: 1, name: 'account1', account_type: MailAccountType.IMAP }, + { id: 2, name: 'account2', account_type: MailAccountType.IMAP }, + { id: 3, name: 'account3', accout_type: MailAccountType.Gmail }, ] const mailRules = [ { id: 1, name: 'rule1', owner: 1, account: 1, enabled: true }, @@ -62,6 +65,8 @@ describe('MailComponent', () => { let modalService: NgbModal let toastService: ToastService let permissionsService: PermissionsService + let activatedRoute: ActivatedRoute + let settingsService: SettingsService beforeEach(() => { TestBed.configureTestingModule({ @@ -110,6 +115,9 @@ describe('MailComponent', () => { modalService = TestBed.inject(NgbModal) toastService = TestBed.inject(ToastService) permissionsService = TestBed.inject(PermissionsService) + activatedRoute = TestBed.inject(ActivatedRoute) + settingsService = TestBed.inject(SettingsService) + settingsService.currentUser = { id: 1 } jest.spyOn(permissionsService, 'currentUserCan').mockReturnValue(true) jest .spyOn(permissionsService, 'currentUserHasObjectPermissions') @@ -348,4 +356,36 @@ describe('MailComponent', () => { expect(patchSpy).toHaveBeenCalled() expect(toastInfoSpy).toHaveBeenCalled() }) + + it('should show success message when oauth account is connected', () => { + const queryParams = { oauth_success: '1' } + jest + .spyOn(activatedRoute, 'queryParamMap', 'get') + .mockReturnValue(of(convertToParamMap(queryParams))) + const toastInfoSpy = jest.spyOn(toastService, 'showInfo') + completeSetup() + expect(toastInfoSpy).toHaveBeenCalled() + }) + + it('should show error message when oauth account connect fails', () => { + const queryParams = { oauth_success: '0' } + jest + .spyOn(activatedRoute, 'queryParamMap', 'get') + .mockReturnValue(of(convertToParamMap(queryParams))) + const toastErrorSpy = jest.spyOn(toastService, 'showError') + completeSetup() + expect(toastErrorSpy).toHaveBeenCalled() + }) + + it('should open account edit dialog if oauth account is connected', () => { + const queryParams = { oauth_success: '1', oauth_account: '3' } + jest + .spyOn(activatedRoute, 'queryParamMap', 'get') + .mockReturnValue(of(convertToParamMap(queryParams))) + completeSetup() + component.oAuthAccountId = 3 + const editSpy = jest.spyOn(component, 'editMailAccount') + component.ngOnInit() + expect(editSpy).toHaveBeenCalled() + }) }) diff --git a/src-ui/src/app/components/manage/mail/mail.component.ts b/src-ui/src/app/components/manage/mail/mail.component.ts index ca93b7a16..0e72d7b92 100644 --- a/src-ui/src/app/components/manage/mail/mail.component.ts +++ b/src-ui/src/app/components/manage/mail/mail.component.ts @@ -37,7 +37,7 @@ export class MailComponent mailRules: MailRule[] = [] unsubscribeNotifier: Subject = new Subject() - oAuthAccoundId: number + oAuthAccountId: number public get gmailOAuthUrl(): string { return this.settingsService.get(SETTINGS_KEYS.GMAIL_OAUTH_URL) @@ -66,10 +66,12 @@ export class MailComponent .subscribe({ next: (r) => { this.mailAccounts = r.results - if (this.oAuthAccoundId) { + console.log(this.mailAccounts, this.oAuthAccountId) + + if (this.oAuthAccountId) { this.editMailAccount( this.mailAccounts.find( - (account) => account.id === this.oAuthAccoundId + (account) => account.id === this.oAuthAccountId ) ) } @@ -99,11 +101,11 @@ export class MailComponent const success = params.get('oauth_success') === '1' if (success) { this.toastService.showInfo($localize`OAuth2 authentication success`) - this.oAuthAccoundId = parseInt(params.get('account_id')) + this.oAuthAccountId = parseInt(params.get('account_id')) if (this.mailAccounts.length > 0) { this.editMailAccount( this.mailAccounts.find( - (account) => account.id === this.oAuthAccoundId + (account) => account.id === this.oAuthAccountId ) ) }