Skip to content

Commit

Permalink
Only mark manual query as User Query SFINT-2449 (#25)
Browse files Browse the repository at this point in the history
* Only mark manual query as User Query SFINT-2449

* Update tests SFINT-2448

* Add more details about which actions are considered as manual SFINT-2448
  • Loading branch information
jeremierobert-coveo committed Aug 16, 2019
1 parent 8285ba0 commit f02709a
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 17 deletions.
4 changes: 2 additions & 2 deletions src/components/UserActions/Strings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ Translation.register(Language.English, {
UserActivity_other_event: 'Other Event',
UserActivity_other_events: 'Other Events',

UserActivity_search: 'User Query',
UserActivity_query: 'Query',
UserActivity_search: 'Query',
UserActivity_query: 'User Query',
UserActivity_click: 'Clicked Document',
UserActivity_view: 'Page View',
UserActivity_custom: 'Custom Action'
Expand Down
18 changes: 17 additions & 1 deletion src/components/UserActions/UserActivity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { formatTime, formatDate, formatTimeInterval } from '../../utils/time';
import { UserAction, UserProfileModel } from '../../models/UserProfileModel';
import { duplicate, search, view, dot } from '../../utils/icons';
import { UserActionType } from '../../rest/UserProfilingEndpoint';
import { MANUAL_SEARCH_EVENT_CAUSE } from '../../utils/events';
import './Strings';

/**
Expand Down Expand Up @@ -305,7 +306,7 @@ export class UserActivity extends Component {
}

private buildTitleElement(action: UserAction) {
const title = action.type === UserActionType.Search && !action.raw.query_expression ? 'query' : action.type.toLowerCase();
const title = this.isManualSubmitAction(action) ? 'query' : action.type.toLowerCase();

const el = document.createElement('div');
el.classList.add(TITLE_CLASS);
Expand Down Expand Up @@ -349,6 +350,21 @@ export class UserActivity extends Component {

return cell;
}

/**
* Dertermine if an action is a manual search submit.
* A manual search submit is a Search event that has a query expression and that the cause is one of the above:
* + **omniboxAnalytics**
* + **userActionsSubmit**
* + **omniboxFromLink**
* + **searchboxAsYouType**
* + **searchboxSubmit**
* + **searchFromLink**
* @param action Action that will be tested.
*/
private isManualSubmitAction(action: UserAction) {
return action.type === UserActionType.Search && action.raw.query_expression && MANUAL_SEARCH_EVENT_CAUSE.indexOf(action.raw.cause) !== -1;
}
}

Initialization.registerAutoCreateComponent(UserActivity);
8 changes: 8 additions & 0 deletions src/utils/events.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export const MANUAL_SEARCH_EVENT_CAUSE = Object.freeze([
'omniboxAnalytics',
'userActionsSubmit',
'omniboxFromLink',
'searchboxAsYouType',
'searchboxSubmit',
'searchFromLink'
]);
41 changes: 27 additions & 14 deletions tests/components/UserActions/UserActivity.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -201,20 +201,33 @@ describe('UserActivity', () => {
});

describe('search event', () => {
it('should display the "User Query" as event title when there is a query expression', () => {
const mock = Mock.advancedComponentSetup<UserActivity>(
UserActivity,
new Mock.AdvancedComponentSetupOptions(null, { userId: 'testuserId' }, env => {
fakeUserProfileModel(env.root, sandbox).getActions.returns(Promise.resolve([FAKE_USER_SEARCH_EVENT]));
return env;
})
);

return delay(() => {
const clickElement = mock.cmp.element.querySelector('.coveo-search');

expect(clickElement).not.toBeNull();
expect(clickElement.querySelector<HTMLElement>('.coveo-title').innerText).toBe('User Query');
['omniboxAnalytics', 'userActionsSubmit', 'omniboxFromLink', 'searchboxAsYouType', 'searchboxSubmit', 'searchFromLink'].map(cause => {
it(`should display the "User Query" as event title when there is a query expression and the cause is ${cause}`, () => {
const mock = Mock.advancedComponentSetup<UserActivity>(
UserActivity,
new Mock.AdvancedComponentSetupOptions(null, { userId: 'testuserId' }, env => {
fakeUserProfileModel(env.root, sandbox).getActions.returns(
Promise.resolve([
new UserAction(UserActionType.Search, new Date('1:00:00 AM'), {
origin_level_1: 'relevant' + Math.random(),
query_expression: 'someSearch' + Math.random(),
cause: cause
})
])
);
return env;
})
);

return delay(async () => {
const clickElement = mock.cmp.element.querySelector('.coveo-search');

const action = await mock.cmp['userProfileModel'].getActions('');

expect(action[0].raw.cause).toBe(cause);
expect(clickElement).not.toBeNull();
expect(clickElement.querySelector<HTMLElement>('.coveo-title').innerText).toBe('User Query');
});
});
});

Expand Down

0 comments on commit f02709a

Please sign in to comment.