Skip to content

Commit 3e12635

Browse files
authored
fix(medic#8118): logged in user can message themselves
1 parent 4513f41 commit 3e12635

File tree

2 files changed

+40
-3
lines changed

2 files changed

+40
-3
lines changed

webapp/src/ts/services/fast-action-button.service.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { ReportsActions } from '@mm-actions/reports';
99
import { ButtonType } from '@mm-components/fast-action-button/fast-action-button.component';
1010
import { TranslateService } from '@mm-services/translate.service';
1111
import { TranslateFromService } from '@mm-services/translate-from.service';
12+
import { UserSettingsService } from '@mm-services/user-settings.service';
1213

1314
@Injectable({
1415
providedIn: 'root'
@@ -24,6 +25,7 @@ export class FastActionButtonService {
2425
private responsiveService: ResponsiveService,
2526
private translateService: TranslateService,
2627
private translateFromService: TranslateFromService,
28+
private userSettingsService: UserSettingsService,
2729
@Inject(DOCUMENT) private document: Document,
2830
) {
2931
this.reportsActions = new ReportsActions(store);
@@ -112,15 +114,23 @@ export class FastActionButtonService {
112114

113115
const validatePhone = () => isPhoneRequired ? !!sendTo?.phone : true;
114116
const canUseMailto = () => useMailtoInMobile && this.responsiveService.isMobile();
117+
const userMessagingThemself = async () => {
118+
const user: any = await this.userSettingsService.get();
119+
return user?.contact_id === sendTo?._id;
120+
};
115121

116122
return {
117123
id: 'send-message',
118124
labelKey: 'fast_action_button.send_message',
119125
icon: { name: 'fa-envelope', type: IconType.FONT_AWESOME },
120126
canDisplay: async () => {
121127
const permission = [ 'can_view_message_action' ];
122-
!canUseMailto() && permission.push('can_edit');
123-
return validatePhone() && await this.authService.has(permission);
128+
if (!canUseMailto()) {
129+
permission.push('can_edit');
130+
}
131+
return validatePhone() &&
132+
await this.authService.has(permission) &&
133+
!(await userMessagingThemself());
124134
},
125135
execute: () => {
126136
if (canUseMailto()) {

webapp/tests/karma/ts/services/fast-action-button.service.spec.ts

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,16 @@ import { TranslateService } from '@mm-services/translate.service';
1212
import { TranslateFromService } from '@mm-services/translate-from.service';
1313
import { ButtonType } from '@mm-components/fast-action-button/fast-action-button.component';
1414
import { ReportsActions } from '@mm-actions/reports';
15+
import { UserSettingsService } from '@mm-services/user-settings.service';
1516

16-
describe('Session service', () => {
17+
describe('Fast Action Button service', () => {
1718
let service: FastActionButtonService;
1819
let router;
1920
let authService;
2021
let responsiveService;
2122
let translateService;
2223
let translateFromService;
24+
let userSettingsService;
2325
let documentMock;
2426
let domElement;
2527

@@ -29,6 +31,7 @@ describe('Session service', () => {
2931
responsiveService = { isMobile: sinon.stub() };
3032
translateService = { instant: sinon.stub().returnsArg(0) };
3133
translateFromService = { get: sinon.stub().returnsArg(0) };
34+
userSettingsService = { get: sinon.stub().resolves() };
3235
domElement = {
3336
click: sinon.stub(),
3437
remove: sinon.stub(),
@@ -46,6 +49,7 @@ describe('Session service', () => {
4649
{ provide: ResponsiveService, useValue: responsiveService },
4750
{ provide: TranslateService, useValue: translateService },
4851
{ provide: TranslateFromService, useValue: translateFromService },
52+
{ provide: UserSettingsService, useValue: userSettingsService },
4953
{ provide: DOCUMENT, useValue: documentMock},
5054
],
5155
});
@@ -759,6 +763,29 @@ describe('Session service', () => {
759763
assertUpdateFacilityAction(actions[0]);
760764
});
761765

766+
it('should not return send message action if sendto matches user', async () => {
767+
const context = {
768+
reportContentType: 'other',
769+
communicationContext: {
770+
sendTo: { _id: '1234', phone: '+2541234567890' },
771+
callbackOpenSendMessage: sinon.stub(),
772+
},
773+
};
774+
authService.has.resolves(true);
775+
responsiveService.isMobile.returns(true);
776+
userSettingsService.get.resolves({ contact_id: '1234' });
777+
778+
const actions = await service.getReportRightSideActions(context);
779+
780+
expect(actions.length).to.equal(1);
781+
expect(authService.has.args).to.have.deep.members([
782+
[ [ 'can_view_message_action' ] ],
783+
[ 'can_edit' ],
784+
]);
785+
786+
assertUpdateFacilityAction(actions[0]);
787+
});
788+
762789
it('should not return actions if no permissions', async () => {
763790
const context = {
764791
reportContentType: 'other',

0 commit comments

Comments
 (0)