[IMP] mail, *: Rename component to match model (step 1)
*: calendar, website_slides [IMP] mail, *: rename component Activity to ActivityView *: calendar, website_slides Task-3045361 Task-3046089 closes odoo/odoo#104261 Related: odoo/enterprise#33300 Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
This commit is contained in:
@@ -1,13 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<templates id="template" xml:space="preserve">
|
||||
|
||||
<t t-inherit="mail.Activity" t-inherit-mode="extension">
|
||||
<xpath expr="//button[hasclass('o_Activity_editButton')]" position="attributes">
|
||||
<t t-inherit="mail.ActivityView" t-inherit-mode="extension">
|
||||
<xpath expr="//button[hasclass('o_ActivityView_editButton')]" position="attributes">
|
||||
<attribute name="t-if">!activityView.activity.calendar_event_id</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//button[hasclass('o_Activity_editButton')]" position="after">
|
||||
<xpath expr="//button[hasclass('o_ActivityView_editButton')]" position="after">
|
||||
<t t-if="activityView.activity.calendar_event_id">
|
||||
<button class="o_Activity_toolButton o_Activity_editButton btn btn-link pt-0" t-on-click="activityView.onClickEdit">
|
||||
<button class="o_ActivityView_toolButton o_ActivityView_editButton btn btn-link pt-0" t-on-click="activityView.onClickEdit">
|
||||
<i class="fa fa-calendar"/> Reschedule
|
||||
</button>
|
||||
</t>
|
||||
|
||||
@@ -37,7 +37,7 @@ QUnit.test('activity click on Reschedule', async function (assert) {
|
||||
},
|
||||
);
|
||||
|
||||
await click('.o_Activity_editButton');
|
||||
await click('.o_ActivityView_editButton');
|
||||
assert.containsOnce(
|
||||
document.body,
|
||||
'.o_calendar_view',
|
||||
|
||||
@@ -7,7 +7,7 @@ import Popover from "web.Popover";
|
||||
|
||||
const { Component } = owl;
|
||||
|
||||
export class Activity extends Component {
|
||||
export class ActivityView extends Component {
|
||||
|
||||
/**
|
||||
* @override
|
||||
@@ -26,10 +26,10 @@ export class Activity extends Component {
|
||||
|
||||
}
|
||||
|
||||
Object.assign(Activity, {
|
||||
Object.assign(ActivityView, {
|
||||
props: { record: Object },
|
||||
template: 'mail.Activity',
|
||||
template: 'mail.ActivityView',
|
||||
components: { Popover },
|
||||
});
|
||||
|
||||
registerMessagingComponent(Activity);
|
||||
registerMessagingComponent(ActivityView);
|
||||
|
||||
@@ -2,25 +2,25 @@
|
||||
// Layout
|
||||
// ------------------------------------------------------------------
|
||||
|
||||
.o_Activity_core {
|
||||
.o_ActivityView_core {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.o_Activity_detailsUserAvatar {
|
||||
.o_ActivityView_detailsUserAvatar {
|
||||
object-fit: cover;
|
||||
height: 18px;
|
||||
width: 18px;
|
||||
}
|
||||
|
||||
.o_Activity_iconContainer {
|
||||
.o_ActivityView_iconContainer {
|
||||
@include o-position-absolute($top: auto, $left: auto, $bottom: -16%, $right: -5%);
|
||||
}
|
||||
|
||||
.o_Activity_note p {
|
||||
.o_ActivityView_note p {
|
||||
margin-bottom: map-get($spacers, 0);
|
||||
}
|
||||
|
||||
.o_Activity_sidebar {
|
||||
.o_ActivityView_sidebar {
|
||||
width: $o-mail-thread-avatar-size;
|
||||
min-width: $o-mail-thread-avatar-size;
|
||||
height: $o-mail-thread-avatar-size;
|
||||
@@ -39,10 +39,10 @@
|
||||
// Style
|
||||
// ------------------------------------------------------------------
|
||||
|
||||
.o_Activity_detailsButton {
|
||||
.o_ActivityView_detailsButton {
|
||||
@include o-hover-text-color($default-color: $o-main-color-muted);
|
||||
}
|
||||
|
||||
.o_Activity_iconContainer {
|
||||
.o_ActivityView_iconContainer {
|
||||
box-shadow: 0 0 0 2px $o-view-background-color;
|
||||
}
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<templates xml:space="preserve">
|
||||
|
||||
<t t-name="mail.Activity" owl="1">
|
||||
<t t-name="mail.ActivityView" owl="1">
|
||||
<t t-if="activityView">
|
||||
<div class="o_Activity d-flex py-2 px-3" t-attf-class="{{ className }}" t-on-click="activityView.onClickActivity" t-ref="root">
|
||||
<div class="o_Activity_sidebar me-3">
|
||||
<div class="o_Activity_user position-relative h-100 w-100">
|
||||
<div class="o_ActivityView d-flex py-2 px-3" t-attf-class="{{ className }}" t-on-click="activityView.onClickActivity" t-ref="root">
|
||||
<div class="o_ActivityView_sidebar me-3">
|
||||
<div class="o_ActivityView_user position-relative h-100 w-100">
|
||||
<t t-if="activityView.activity.assignee">
|
||||
<img class="o_Activity_userAvatar rounded-circle h-100 w-100 o_object_fit_cover" t-attf-src="/web/image/res.users/{{ activityView.activity.assignee.id }}/avatar_128" t-att-alt="activityView.activity.assignee.nameOrDisplayName"/>
|
||||
<img class="o_ActivityView_userAvatar rounded-circle h-100 w-100 o_object_fit_cover" t-attf-src="/web/image/res.users/{{ activityView.activity.assignee.id }}/avatar_128" t-att-alt="activityView.activity.assignee.nameOrDisplayName"/>
|
||||
</t>
|
||||
<div class="o_Activity_iconContainer d-flex align-items-center justify-content-center rounded-circle w-50 h-50"
|
||||
<div class="o_ActivityView_iconContainer d-flex align-items-center justify-content-center rounded-circle w-50 h-50"
|
||||
t-att-class="{
|
||||
'text-bg-success': activityView.activity.state === 'planned',
|
||||
'text-bg-warning': activityView.activity.state === 'today',
|
||||
'text-bg-danger': activityView.activity.state === 'overdue',
|
||||
}"
|
||||
>
|
||||
<i class="o_Activity_icon fa small" t-attf-class="{{ activityView.activity.icon }}"/>
|
||||
<i class="o_ActivityView_icon fa small" t-attf-class="{{ activityView.activity.icon }}"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_Activity_core">
|
||||
<div class="o_Activity_info d-flex align-items-baseline">
|
||||
<div class="o_Activity_dueDateText me-2"
|
||||
<div class="o_ActivityView_core">
|
||||
<div class="o_ActivityView_info d-flex align-items-baseline">
|
||||
<div class="o_ActivityView_dueDateText me-2"
|
||||
t-att-class="{
|
||||
'text-danger': activityView.activity.state === 'overdue',
|
||||
'text-success': activityView.activity.state === 'planned',
|
||||
@@ -32,23 +32,23 @@
|
||||
<b t-esc="activityView.delayLabel"/>
|
||||
</div>
|
||||
<t t-if="activityView.activity.summary">
|
||||
<b class="o_Activity_summary text-900 me-2">
|
||||
<b class="o_ActivityView_summary text-900 me-2">
|
||||
<t t-esc="activityView.summary"/>
|
||||
</b>
|
||||
</t>
|
||||
<t t-elif="activityView.activity.type">
|
||||
<b class="o_Activity_summary o_Activity_type text-900 me-2">
|
||||
<b class="o_ActivityView_summary o_ActivityView_type text-900 me-2">
|
||||
<t t-esc="activityView.activity.type.displayName"/>
|
||||
</b>
|
||||
</t>
|
||||
<t t-if="activityView.activity.assignee">
|
||||
<div class="o_Activity_userName">
|
||||
<div class="o_ActivityView_userName">
|
||||
<t t-esc="activityView.assignedUserText"/>
|
||||
</div>
|
||||
</t>
|
||||
<a
|
||||
href="#"
|
||||
class="o_Activity_detailsButton btn py-0"
|
||||
class="o_ActivityView_detailsButton btn py-0"
|
||||
t-att-class="activityView.areDetailsVisible ? 'text-primary' : 'btn-link btn-primary'"
|
||||
t-att-aria-expanded="activityView.areDetailsVisible ? 'true' : 'false'"
|
||||
t-on-click="activityView.onClickDetailsButton"
|
||||
@@ -59,35 +59,35 @@
|
||||
</div>
|
||||
|
||||
<t t-if="activityView.areDetailsVisible">
|
||||
<div class="o_Activity_details">
|
||||
<div class="o_ActivityView_details">
|
||||
<div class="d-md-table table table-sm mt-2 mb-3">
|
||||
<div t-if="activityView.activity.type" class="d-md-table-row mb-3">
|
||||
<div class="d-md-table-cell fw-bold text-md-end m-0 py-md-1 px-md-4">Activity type</div>
|
||||
<div class="o_Activity_type d-md-table-cell py-md-1 pe-4">
|
||||
<div class="o_ActivityView_type d-md-table-cell py-md-1 pe-4">
|
||||
<t t-esc="activityView.activity.type.displayName"/>
|
||||
</div>
|
||||
</div>
|
||||
<div t-if="activityView.activity.creator" class="d-md-table-row mb-3">
|
||||
<div class="d-md-table-cell fw-bold text-md-end m-0 py-md-1 px-md-4">Created</div>
|
||||
<div class="o_Activity_detailsCreation d-md-table-cell py-md-1 pe-4">
|
||||
<div class="o_ActivityView_detailsCreation d-md-table-cell py-md-1 pe-4">
|
||||
<t t-esc="activityView.formattedCreateDatetime"/>, <br t-if="messaging.device.isSmall"/>by
|
||||
<img class="o_Activity_detailsUserAvatar o_Activity_detailsCreatorAvatar ms-1 me-1 rounded-circle align-text-bottom" t-attf-src="/web/image/res.users/{{ activityView.activity.creator.id }}/avatar_128" t-att-title="activityView.activity.creator.nameOrDisplayName" t-att-alt="activityView.activity.creator.nameOrDisplayName"/>
|
||||
<b class="o_Activity_detailsCreator">
|
||||
<img class="o_ActivityView_detailsUserAvatar o_ActivityView_detailsCreatorAvatar ms-1 me-1 rounded-circle align-text-bottom" t-attf-src="/web/image/res.users/{{ activityView.activity.creator.id }}/avatar_128" t-att-title="activityView.activity.creator.nameOrDisplayName" t-att-alt="activityView.activity.creator.nameOrDisplayName"/>
|
||||
<b class="o_ActivityView_detailsCreator">
|
||||
<t t-esc="activityView.activity.creator.nameOrDisplayName"/>
|
||||
</b>
|
||||
</div>
|
||||
</div>
|
||||
<div t-if="activityView.activity.assignee" class="d-md-table-row mb-3">
|
||||
<div class="d-md-table-cell fw-bold text-md-end m-0 py-md-1 px-md-4">Assigned to</div>
|
||||
<div class="o_Activity_detailsAssignation d-md-table-cell py-md-1 pe-4">
|
||||
<img class="o_Activity_detailsUserAvatar o_Activity_detailsAssignationUserAvatar me-1 rounded-circle align-text-bottom" t-attf-src="/web/image/res.users/{{ activityView.activity.assignee.id }}/avatar_128" t-att-title="activityView.activity.assignee.nameOrDisplayName" t-att-alt="activityView.activity.assignee.nameOrDisplayName"/>
|
||||
<div class="o_ActivityView_detailsAssignation d-md-table-cell py-md-1 pe-4">
|
||||
<img class="o_ActivityView_detailsUserAvatar o_ActivityView_detailsAssignationUserAvatar me-1 rounded-circle align-text-bottom" t-attf-src="/web/image/res.users/{{ activityView.activity.assignee.id }}/avatar_128" t-att-title="activityView.activity.assignee.nameOrDisplayName" t-att-alt="activityView.activity.assignee.nameOrDisplayName"/>
|
||||
<b t-esc="activityView.activity.assignee.nameOrDisplayName"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-md-table-row">
|
||||
<div class="d-md-table-cell fw-bold text-md-end m-0 py-md-1 px-md-4">Due on</div>
|
||||
<div class="o_Activity_detailsDueDate d-md-table-cell py-md-1 pe-4">
|
||||
<span class="o_Activity_deadlineDateText"
|
||||
<div class="o_ActivityView_detailsDueDate d-md-table-cell py-md-1 pe-4">
|
||||
<span class="o_ActivityView_deadlineDateText"
|
||||
t-att-class="{
|
||||
'text-danger': activityView.activity.state === 'overdue',
|
||||
'text-success': activityView.activity.state === 'planned',
|
||||
@@ -103,16 +103,16 @@
|
||||
</t>
|
||||
|
||||
<t t-if="activityView.activity.note">
|
||||
<div class="o_Activity_note">
|
||||
<div class="o_ActivityView_note">
|
||||
<t t-out="activityView.activity.noteAsMarkup"/>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-if="activityView.mailTemplateViews.length > 0">
|
||||
<div class="o_Activity_mailTemplates">
|
||||
<div class="o_ActivityView_mailTemplates">
|
||||
<t t-foreach="activityView.mailTemplateViews" t-as="mailTemplateView" t-key="mailTemplateView.localId">
|
||||
<MailTemplate
|
||||
className="'o_Activity_mailTemplate'"
|
||||
className="'o_ActivityView_mailTemplate'"
|
||||
record="mailTemplateView"
|
||||
/>
|
||||
</t>
|
||||
@@ -120,19 +120,19 @@
|
||||
</t>
|
||||
|
||||
<t t-if="activityView.activity.canWrite">
|
||||
<div name="tools" class="o_Activity_tools d-flex">
|
||||
<button class="o_Activity_toolButton o_Activity_markDoneButton btn btn-link btn-primary pt-0 ps-0" t-att-title="activityView.markDoneText" t-ref="markDoneButton" t-on-click="activityView.onClickMarkDoneButton">
|
||||
<div name="tools" class="o_ActivityView_tools d-flex">
|
||||
<button class="o_ActivityView_toolButton o_ActivityView_markDoneButton btn btn-link btn-primary pt-0 ps-0" t-att-title="activityView.markDoneText" t-ref="markDoneButton" t-on-click="activityView.onClickMarkDoneButton">
|
||||
<i class="fa fa-check"/> Mark Done
|
||||
</button>
|
||||
<t t-if="activityView.fileUploader">
|
||||
<button class="o_Activity_toolButton o_Activity_uploadButton btn btn-link btn-primary pt-0 ps-0" t-on-click="activityView.onClickUploadDocument">
|
||||
<button class="o_ActivityView_toolButton o_ActivityView_uploadButton btn btn-link btn-primary pt-0 ps-0" t-on-click="activityView.onClickUploadDocument">
|
||||
<i class="fa fa-upload"/> Upload Document
|
||||
</button>
|
||||
</t>
|
||||
<button class="o_Activity_toolButton o_Activity_editButton btn btn-link btn-primary pt-0" t-on-click="activityView.onClickEdit">
|
||||
<button class="o_ActivityView_toolButton o_ActivityView_editButton btn btn-link btn-primary pt-0" t-on-click="activityView.onClickEdit">
|
||||
<i class="fa fa-pencil"/> Edit
|
||||
</button>
|
||||
<button class="o_Activity_toolButton o_Activity_cancelButton btn btn-link btn-primary pt-0" t-on-click="activityView.onClickCancel" >
|
||||
<button class="o_ActivityView_toolButton o_ActivityView_cancelButton btn btn-link btn-primary pt-0" t-on-click="activityView.onClickCancel" >
|
||||
<i class="fa fa-times"/> Cancel
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<t t-if="activityBoxView.isActivityListVisible">
|
||||
<div class="o_ActivityBox_activityList">
|
||||
<t t-foreach="activityBoxView.activityViews" t-as="activityView" t-key="activityView.localId">
|
||||
<Activity className="'o_ActivityBox_activity'" record="activityView"/>
|
||||
<ActivityView className="'o_ActivityBox_activity'" record="activityView"/>
|
||||
</t>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
+6
-6
@@ -25,7 +25,7 @@ QUnit.test('activity mark done popover simplest layout', async function (assert)
|
||||
res_id: resPartnerId1,
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
await click('.o_Activity_markDoneButton');
|
||||
await click('.o_ActivityView_markDoneButton');
|
||||
|
||||
assert.containsOnce(
|
||||
document.body,
|
||||
@@ -77,7 +77,7 @@ QUnit.test('activity with force next mark done popover simplest layout', async f
|
||||
res_id: resPartnerId1,
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
await click('.o_Activity_markDoneButton');
|
||||
await click('.o_ActivityView_markDoneButton');
|
||||
|
||||
assert.containsOnce(
|
||||
document.body,
|
||||
@@ -145,7 +145,7 @@ QUnit.test('activity mark done popover mark done without feedback', async functi
|
||||
res_id: resPartnerId1,
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
await click('.o_Activity_markDoneButton');
|
||||
await click('.o_ActivityView_markDoneButton');
|
||||
await click('.o_ActivityMarkDonePopoverContent_doneButton');
|
||||
assert.verifySteps(
|
||||
['action_feedback'],
|
||||
@@ -187,7 +187,7 @@ QUnit.test('activity mark done popover mark done with feedback', async function
|
||||
res_id: resPartnerId1,
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
await click('.o_Activity_markDoneButton');
|
||||
await click('.o_ActivityView_markDoneButton');
|
||||
|
||||
let feedbackTextarea = document.querySelector('.o_ActivityMarkDonePopoverContent_feedback');
|
||||
feedbackTextarea.focus();
|
||||
@@ -237,7 +237,7 @@ QUnit.test('activity mark done popover mark done and schedule next', async funct
|
||||
throw new Error("The do-action event should not be triggered when the route doesn't return an action");
|
||||
},
|
||||
});
|
||||
await click('.o_Activity_markDoneButton');
|
||||
await click('.o_ActivityView_markDoneButton');
|
||||
|
||||
let feedbackTextarea = document.querySelector('.o_ActivityMarkDonePopoverContent_feedback');
|
||||
feedbackTextarea.focus();
|
||||
@@ -282,7 +282,7 @@ QUnit.test('[technical] activity mark done & schedule next with new action', asy
|
||||
);
|
||||
},
|
||||
});
|
||||
await click('.o_Activity_markDoneButton');
|
||||
await click('.o_ActivityView_markDoneButton');
|
||||
|
||||
await click('.o_ActivityMarkDonePopoverContent_doneScheduleNextButton');
|
||||
assert.verifySteps(
|
||||
|
||||
@@ -25,62 +25,62 @@ QUnit.test('activity simplest layout', async function (assert) {
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity').length,
|
||||
document.querySelectorAll('.o_ActivityView').length,
|
||||
1,
|
||||
"should have activity component"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_sidebar').length,
|
||||
document.querySelectorAll('.o_ActivityView_sidebar').length,
|
||||
1,
|
||||
"should have activity sidebar"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_core').length,
|
||||
document.querySelectorAll('.o_ActivityView_core').length,
|
||||
1,
|
||||
"should have activity core"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_user').length,
|
||||
document.querySelectorAll('.o_ActivityView_user').length,
|
||||
1,
|
||||
"should have activity user"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_info').length,
|
||||
document.querySelectorAll('.o_ActivityView_info').length,
|
||||
1,
|
||||
"should have activity info"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_note').length,
|
||||
document.querySelectorAll('.o_ActivityView_note').length,
|
||||
0,
|
||||
"should not have activity note"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_details').length,
|
||||
document.querySelectorAll('.o_ActivityView_details').length,
|
||||
0,
|
||||
"should not have activity details"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_mailTemplates').length,
|
||||
document.querySelectorAll('.o_ActivityView_mailTemplates').length,
|
||||
0,
|
||||
"should not have activity mail templates"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_editButton').length,
|
||||
document.querySelectorAll('.o_ActivityView_editButton').length,
|
||||
0,
|
||||
"should not have activity Edit button"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_cancelButton').length,
|
||||
document.querySelectorAll('.o_ActivityView_cancelButton').length,
|
||||
0,
|
||||
"should not have activity Cancel button"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_markDoneButton').length,
|
||||
document.querySelectorAll('.o_ActivityView_markDoneButton').length,
|
||||
0,
|
||||
"should not have activity Mark as Done button"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_uploadButton').length,
|
||||
document.querySelectorAll('.o_ActivityView_uploadButton').length,
|
||||
0,
|
||||
"should not have activity Upload button"
|
||||
);
|
||||
@@ -103,17 +103,17 @@ QUnit.test('activity with note layout', async function (assert) {
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity').length,
|
||||
document.querySelectorAll('.o_ActivityView').length,
|
||||
1,
|
||||
"should have activity component"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_note').length,
|
||||
document.querySelectorAll('.o_ActivityView_note').length,
|
||||
1,
|
||||
"should have activity note"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelector('.o_Activity_note').textContent,
|
||||
document.querySelector('.o_ActivityView_note').textContent,
|
||||
"There is no good or bad note",
|
||||
"activity note should be 'There is no good or bad note'"
|
||||
);
|
||||
@@ -140,21 +140,21 @@ QUnit.test('activity info layout when planned after tomorrow', async function (a
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity').length,
|
||||
document.querySelectorAll('.o_ActivityView').length,
|
||||
1,
|
||||
"should have activity component"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_dueDateText').length,
|
||||
document.querySelectorAll('.o_ActivityView_dueDateText').length,
|
||||
1,
|
||||
"should have activity delay"
|
||||
);
|
||||
assert.ok(
|
||||
document.querySelector('.o_Activity_dueDateText').classList.contains('text-success'),
|
||||
document.querySelector('.o_ActivityView_dueDateText').classList.contains('text-success'),
|
||||
"activity delay should have the right color modifier class (text-success)"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelector('.o_Activity_dueDateText').textContent,
|
||||
document.querySelector('.o_ActivityView_dueDateText').textContent,
|
||||
"Due in 5 days:",
|
||||
"activity delay should have 'Due in 5 days:' as label"
|
||||
);
|
||||
@@ -181,21 +181,21 @@ QUnit.test('activity info layout when planned tomorrow', async function (assert)
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity').length,
|
||||
document.querySelectorAll('.o_ActivityView').length,
|
||||
1,
|
||||
"should have activity component"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_dueDateText').length,
|
||||
document.querySelectorAll('.o_ActivityView_dueDateText').length,
|
||||
1,
|
||||
"should have activity delay"
|
||||
);
|
||||
assert.ok(
|
||||
document.querySelector('.o_Activity_dueDateText').classList.contains('text-success'),
|
||||
document.querySelector('.o_ActivityView_dueDateText').classList.contains('text-success'),
|
||||
"activity delay should have the right color modifier class (text-success)"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelector('.o_Activity_dueDateText').textContent,
|
||||
document.querySelector('.o_ActivityView_dueDateText').textContent,
|
||||
'Tomorrow:',
|
||||
"activity delay should have 'Tomorrow:' as label"
|
||||
);
|
||||
@@ -219,21 +219,21 @@ QUnit.test('activity info layout when planned today', async function (assert) {
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity').length,
|
||||
document.querySelectorAll('.o_ActivityView').length,
|
||||
1,
|
||||
"should have activity component"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_dueDateText').length,
|
||||
document.querySelectorAll('.o_ActivityView_dueDateText').length,
|
||||
1,
|
||||
"should have activity delay"
|
||||
);
|
||||
assert.ok(
|
||||
document.querySelector('.o_Activity_dueDateText').classList.contains('text-warning'),
|
||||
document.querySelector('.o_ActivityView_dueDateText').classList.contains('text-warning'),
|
||||
"activity delay should have the right color modifier class (text-warning)"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelector('.o_Activity_dueDateText').textContent,
|
||||
document.querySelector('.o_ActivityView_dueDateText').textContent,
|
||||
"Today:",
|
||||
"activity delay should have 'Today:' as label"
|
||||
);
|
||||
@@ -260,21 +260,21 @@ QUnit.test('activity info layout when planned yesterday', async function (assert
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity').length,
|
||||
document.querySelectorAll('.o_ActivityView').length,
|
||||
1,
|
||||
"should have activity component"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_dueDateText').length,
|
||||
document.querySelectorAll('.o_ActivityView_dueDateText').length,
|
||||
1,
|
||||
"should have activity delay"
|
||||
);
|
||||
assert.ok(
|
||||
document.querySelector('.o_Activity_dueDateText').classList.contains('text-danger'),
|
||||
document.querySelector('.o_ActivityView_dueDateText').classList.contains('text-danger'),
|
||||
"activity delay should have the right color modifier class (text-danger)"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelector('.o_Activity_dueDateText').textContent,
|
||||
document.querySelector('.o_ActivityView_dueDateText').textContent,
|
||||
"Yesterday:",
|
||||
"activity delay should have 'Yesterday:' as label"
|
||||
);
|
||||
@@ -301,21 +301,21 @@ QUnit.test('activity info layout when planned before yesterday', async function
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity').length,
|
||||
document.querySelectorAll('.o_ActivityView').length,
|
||||
1,
|
||||
"should have activity component"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_dueDateText').length,
|
||||
document.querySelectorAll('.o_ActivityView_dueDateText').length,
|
||||
1,
|
||||
"should have activity delay"
|
||||
);
|
||||
assert.ok(
|
||||
document.querySelector('.o_Activity_dueDateText').classList.contains('text-danger'),
|
||||
document.querySelector('.o_ActivityView_dueDateText').classList.contains('text-danger'),
|
||||
"activity delay should have the right color modifier class (text-danger)"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelector('.o_Activity_dueDateText').textContent,
|
||||
document.querySelector('.o_ActivityView_dueDateText').textContent,
|
||||
"5 days overdue:",
|
||||
"activity delay should have '5 days overdue:' as label"
|
||||
);
|
||||
@@ -338,22 +338,22 @@ QUnit.test('activity with a summary layout', async function (assert) {
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity').length,
|
||||
document.querySelectorAll('.o_ActivityView').length,
|
||||
1,
|
||||
"should have activity component"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_summary').length,
|
||||
document.querySelectorAll('.o_ActivityView_summary').length,
|
||||
1,
|
||||
"should have activity summary"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_type').length,
|
||||
document.querySelectorAll('.o_ActivityView_type').length,
|
||||
0,
|
||||
"should not have the activity type as summary"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelector('.o_Activity_summary').textContent.trim(),
|
||||
document.querySelector('.o_ActivityView_summary').textContent.trim(),
|
||||
"“test summary”",
|
||||
"should have the specific activity summary in activity summary"
|
||||
);
|
||||
@@ -376,27 +376,27 @@ QUnit.test('activity without summary layout', async function (assert) {
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity').length,
|
||||
document.querySelectorAll('.o_ActivityView').length,
|
||||
1,
|
||||
"should have activity component"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_type').length,
|
||||
document.querySelectorAll('.o_ActivityView_type').length,
|
||||
1,
|
||||
"activity details should have an activity type section"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelector('.o_Activity_type').textContent.trim(),
|
||||
document.querySelector('.o_ActivityView_type').textContent.trim(),
|
||||
"Email",
|
||||
"activity details should have the activity type display name in type section"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_summary.o_Activity_type').length,
|
||||
document.querySelectorAll('.o_ActivityView_summary.o_ActivityView_type').length,
|
||||
1,
|
||||
"should have activity type as summary"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_summary:not(.o_Activity_type)').length,
|
||||
document.querySelectorAll('.o_ActivityView_summary:not(.o_ActivityView_type)').length,
|
||||
0,
|
||||
"should not have a specific summary"
|
||||
);
|
||||
@@ -425,31 +425,31 @@ QUnit.test('activity details toggle', async function (assert) {
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity').length,
|
||||
document.querySelectorAll('.o_ActivityView').length,
|
||||
1,
|
||||
"should have activity component"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_details').length,
|
||||
document.querySelectorAll('.o_ActivityView_details').length,
|
||||
0,
|
||||
"activity details should not be visible by default"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_detailsButton').length,
|
||||
document.querySelectorAll('.o_ActivityView_detailsButton').length,
|
||||
1,
|
||||
"activity should have a details button"
|
||||
);
|
||||
|
||||
await click('.o_Activity_detailsButton');
|
||||
await click('.o_ActivityView_detailsButton');
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_details').length,
|
||||
document.querySelectorAll('.o_ActivityView_details').length,
|
||||
1,
|
||||
"activity details should be visible after clicking on details button"
|
||||
);
|
||||
|
||||
await click('.o_Activity_detailsButton');
|
||||
await click('.o_ActivityView_detailsButton');
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_details').length,
|
||||
document.querySelectorAll('.o_ActivityView_details').length,
|
||||
0,
|
||||
"activity details should no longer be visible after clicking again on details button"
|
||||
);
|
||||
@@ -482,59 +482,59 @@ QUnit.test('activity details layout', async function (assert) {
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity').length,
|
||||
document.querySelectorAll('.o_ActivityView').length,
|
||||
1,
|
||||
"should have activity component"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_userAvatar').length,
|
||||
document.querySelectorAll('.o_ActivityView_userAvatar').length,
|
||||
1,
|
||||
"should have activity user avatar"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_detailsButton').length,
|
||||
document.querySelectorAll('.o_ActivityView_detailsButton').length,
|
||||
1,
|
||||
"activity should have a details button"
|
||||
);
|
||||
|
||||
await click('.o_Activity_detailsButton');
|
||||
await click('.o_ActivityView_detailsButton');
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_details').length,
|
||||
document.querySelectorAll('.o_ActivityView_details').length,
|
||||
1,
|
||||
"activity details should be visible after clicking on details button"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_details .o_Activity_type').length,
|
||||
document.querySelectorAll('.o_ActivityView_details .o_ActivityView_type').length,
|
||||
1,
|
||||
"activity details should have type"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelector('.o_Activity_details .o_Activity_type').textContent,
|
||||
document.querySelector('.o_ActivityView_details .o_ActivityView_type').textContent,
|
||||
"Email",
|
||||
"activity details type should be 'Email'"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_detailsCreation').length,
|
||||
document.querySelectorAll('.o_ActivityView_detailsCreation').length,
|
||||
1,
|
||||
"activity details should have creation date "
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_detailsCreator').length,
|
||||
document.querySelectorAll('.o_ActivityView_detailsCreator').length,
|
||||
1,
|
||||
"activity details should have creator"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_detailsAssignation').length,
|
||||
document.querySelectorAll('.o_ActivityView_detailsAssignation').length,
|
||||
1,
|
||||
"activity details should have assignation information"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelector('.o_Activity_detailsAssignation').textContent.indexOf('Pauvre pomme'),
|
||||
document.querySelector('.o_ActivityView_detailsAssignation').textContent.indexOf('Pauvre pomme'),
|
||||
0,
|
||||
"activity details assignation information should contain creator display name"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_detailsAssignationUserAvatar').length,
|
||||
document.querySelectorAll('.o_ActivityView_detailsAssignationUserAvatar').length,
|
||||
1,
|
||||
"activity details should have user avatar"
|
||||
);
|
||||
@@ -560,22 +560,22 @@ QUnit.test('activity with mail template layout', async function (assert) {
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity').length,
|
||||
document.querySelectorAll('.o_ActivityView').length,
|
||||
1,
|
||||
"should have activity component"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_sidebar').length,
|
||||
document.querySelectorAll('.o_ActivityView_sidebar').length,
|
||||
1,
|
||||
"should have activity sidebar"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_mailTemplates').length,
|
||||
document.querySelectorAll('.o_ActivityView_mailTemplates').length,
|
||||
1,
|
||||
"should have activity mail templates"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_mailTemplate').length,
|
||||
document.querySelectorAll('.o_ActivityView_mailTemplate').length,
|
||||
1,
|
||||
"should have activity mail template"
|
||||
);
|
||||
@@ -655,7 +655,7 @@ QUnit.test('activity with mail template: preview mail', async function (assert)
|
||||
},
|
||||
});
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity').length,
|
||||
document.querySelectorAll('.o_ActivityView').length,
|
||||
1,
|
||||
"should have activity component"
|
||||
);
|
||||
@@ -703,7 +703,7 @@ QUnit.test('activity with mail template: send mail', async function (assert) {
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity').length,
|
||||
document.querySelectorAll('.o_ActivityView').length,
|
||||
1,
|
||||
"should have activity component"
|
||||
);
|
||||
@@ -740,12 +740,12 @@ QUnit.test('activity upload document is available', async function (assert) {
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity').length,
|
||||
document.querySelectorAll('.o_ActivityView').length,
|
||||
1,
|
||||
"should have activity component"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_uploadButton').length,
|
||||
document.querySelectorAll('.o_ActivityView_uploadButton').length,
|
||||
1,
|
||||
"should have activity upload button"
|
||||
);
|
||||
@@ -775,24 +775,24 @@ QUnit.test('activity click on mark as done', async function (assert) {
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity').length,
|
||||
document.querySelectorAll('.o_ActivityView').length,
|
||||
1,
|
||||
"should have activity component"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_markDoneButton').length,
|
||||
document.querySelectorAll('.o_ActivityView_markDoneButton').length,
|
||||
1,
|
||||
"should have activity Mark as Done button"
|
||||
);
|
||||
|
||||
await click('.o_Activity_markDoneButton');
|
||||
await click('.o_ActivityView_markDoneButton');
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_ActivityMarkDonePopoverContent').length,
|
||||
1,
|
||||
"should have opened the mark done popover"
|
||||
);
|
||||
|
||||
await click('.o_Activity_markDoneButton');
|
||||
await click('.o_ActivityView_markDoneButton');
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_ActivityMarkDonePopoverContent').length,
|
||||
0,
|
||||
@@ -821,16 +821,16 @@ QUnit.test('activity mark as done popover should focus feedback input on open [R
|
||||
});
|
||||
assert.containsOnce(
|
||||
document.body,
|
||||
'.o_Activity',
|
||||
'.o_ActivityView',
|
||||
"should have activity component"
|
||||
);
|
||||
assert.containsOnce(
|
||||
document.body,
|
||||
'.o_Activity_markDoneButton',
|
||||
'.o_ActivityView_markDoneButton',
|
||||
"should have activity Mark as Done button"
|
||||
);
|
||||
|
||||
await click('.o_Activity_markDoneButton');
|
||||
await click('.o_ActivityView_markDoneButton');
|
||||
assert.strictEqual(
|
||||
document.querySelector('.o_ActivityMarkDonePopoverContent_feedback'),
|
||||
document.activeElement,
|
||||
@@ -890,17 +890,17 @@ QUnit.test('activity click on edit', async function (assert) {
|
||||
},
|
||||
});
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity').length,
|
||||
document.querySelectorAll('.o_ActivityView').length,
|
||||
1,
|
||||
"should have activity component"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_editButton').length,
|
||||
document.querySelectorAll('.o_ActivityView_editButton').length,
|
||||
1,
|
||||
"should have activity edit button"
|
||||
);
|
||||
|
||||
await click('.o_Activity_editButton');
|
||||
await click('.o_ActivityView_editButton');
|
||||
assert.verifySteps(
|
||||
['do_action'],
|
||||
"should have called 'schedule activity' action correctly"
|
||||
@@ -958,43 +958,43 @@ QUnit.test('activity edition', async function (assert) {
|
||||
});
|
||||
assert.containsOnce(
|
||||
document.body,
|
||||
'.o_Activity',
|
||||
'.o_ActivityView',
|
||||
"should have activity component"
|
||||
);
|
||||
assert.containsOnce(
|
||||
document.body,
|
||||
'.o_Activity_editButton',
|
||||
'.o_ActivityView_editButton',
|
||||
"should have activity edit button"
|
||||
);
|
||||
assert.containsOnce(
|
||||
document.body,
|
||||
'.o_Activity_icon',
|
||||
'.o_ActivityView_icon',
|
||||
"should have activity icon"
|
||||
);
|
||||
assert.containsOnce(
|
||||
document.body,
|
||||
'.o_Activity_icon.fa-times',
|
||||
'.o_ActivityView_icon.fa-times',
|
||||
"should have initial activity icon"
|
||||
);
|
||||
assert.containsNone(
|
||||
document.body,
|
||||
'.o_Activity_icon.fa-check',
|
||||
'.o_ActivityView_icon.fa-check',
|
||||
"should not have new activity icon when not edited yet"
|
||||
);
|
||||
|
||||
await click('.o_Activity_editButton');
|
||||
await click('.o_ActivityView_editButton');
|
||||
assert.verifySteps(
|
||||
['do_action'],
|
||||
"should have called 'schedule activity' action correctly"
|
||||
);
|
||||
assert.containsNone(
|
||||
document.body,
|
||||
'.o_Activity_icon.fa-times',
|
||||
'.o_ActivityView_icon.fa-times',
|
||||
"should no more have initial activity icon once edited"
|
||||
);
|
||||
assert.containsOnce(
|
||||
document.body,
|
||||
'.o_Activity_icon.fa-check',
|
||||
'.o_ActivityView_icon.fa-check',
|
||||
"should now have new activity icon once edited"
|
||||
);
|
||||
});
|
||||
@@ -1026,23 +1026,23 @@ QUnit.test('activity click on cancel', async function (assert) {
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity').length,
|
||||
document.querySelectorAll('.o_ActivityView').length,
|
||||
1,
|
||||
"should have activity component"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity_cancelButton').length,
|
||||
document.querySelectorAll('.o_ActivityView_cancelButton').length,
|
||||
1,
|
||||
"should have activity cancel button"
|
||||
);
|
||||
|
||||
await click('.o_Activity_cancelButton');
|
||||
await click('.o_ActivityView_cancelButton');
|
||||
assert.verifySteps(
|
||||
['unlink'],
|
||||
"should have called unlink rpc after clicking on cancel"
|
||||
);
|
||||
assert.strictEqual(
|
||||
document.querySelectorAll('.o_Activity').length,
|
||||
document.querySelectorAll('.o_ActivityView').length,
|
||||
0,
|
||||
"should no longer display activity after clicking on cancel"
|
||||
);
|
||||
@@ -1069,7 +1069,7 @@ QUnit.test('activity mark done popover close on ESCAPE', async function (assert)
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
|
||||
await click('.o_Activity_markDoneButton');
|
||||
await click('.o_ActivityView_markDoneButton');
|
||||
assert.containsOnce(
|
||||
document.body,
|
||||
'.o_ActivityMarkDonePopoverContent',
|
||||
@@ -1109,7 +1109,7 @@ QUnit.test('activity mark done popover click on discard', async function (assert
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
|
||||
await click('.o_Activity_markDoneButton');
|
||||
await click('.o_ActivityView_markDoneButton');
|
||||
assert.containsOnce(
|
||||
document.body,
|
||||
'.o_ActivityMarkDonePopoverContent',
|
||||
@@ -1170,16 +1170,16 @@ QUnit.test('data-oe-id & data-oe-model link redirection on click', async functio
|
||||
});
|
||||
assert.containsOnce(
|
||||
document.body,
|
||||
'.o_Activity_note',
|
||||
'.o_ActivityView_note',
|
||||
"activity should have a note"
|
||||
);
|
||||
assert.containsOnce(
|
||||
document.querySelector('.o_Activity_note'),
|
||||
document.querySelector('.o_ActivityView_note'),
|
||||
'a',
|
||||
"activity note should have a link"
|
||||
);
|
||||
|
||||
document.querySelector(`.o_Activity_note a`).click();
|
||||
document.querySelector(`.o_ActivityView_note a`).click();
|
||||
assert.verifySteps(
|
||||
['do-action:openFormView_some.model_250'],
|
||||
"should have open form view on related record after click on link"
|
||||
@@ -1219,12 +1219,12 @@ QUnit.test('button related to file uploading is replaced when updating activity
|
||||
});
|
||||
assert.containsOnce(
|
||||
document.body,
|
||||
'.o_Activity_markDoneButton',
|
||||
'.o_ActivityView_markDoneButton',
|
||||
"should have a mark done button when changing activity type from 'Upload Document' to 'Email'"
|
||||
);
|
||||
assert.containsNone(
|
||||
document.body,
|
||||
'.o_Activity_uploadButton',
|
||||
'.o_ActivityView_uploadButton',
|
||||
"should not have an upload button after changing the activity type from 'Upload Document' to 'Email'"
|
||||
);
|
||||
});
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<templates xml:space="preserve">
|
||||
<t t-inherit="mail.Activity" t-inherit-mode="extension">
|
||||
<t t-inherit="mail.ActivityView" t-inherit-mode="extension">
|
||||
<xpath expr="//*[@name='tools']" position="replace">
|
||||
<t t-if="activityView.activity.requestingPartner and activityView.activity.thread.model === 'slide.channel'">
|
||||
<div class="o_Activity_tools">
|
||||
<button class="o_Activity_toolButton o_Activity_grantAccessButton btn btn-link" t-on-click="activityView.onGrantAccess">
|
||||
<div class="o_ActivityView_tools">
|
||||
<button class="o_ActivityView_toolButton o_ActivityView_grantAccessButton btn btn-link" t-on-click="activityView.onGrantAccess">
|
||||
<i class="fa fa-check"/> Grant Access
|
||||
</button>
|
||||
<button class="o_Activity_toolButton o_Activity_refuseAccessButton btn btn-link" t-on-click="activityView.onRefuseAccess">
|
||||
<button class="o_ActivityView_toolButton o_ActivityView_refuseAccessButton btn btn-link" t-on-click="activityView.onRefuseAccess">
|
||||
<i class="fa fa-times"/> Refuse Access
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -37,10 +37,10 @@ QUnit.test('grant course access', async function (assert) {
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
|
||||
assert.containsOnce(document.body, '.o_Activity', "should have activity component");
|
||||
assert.containsOnce(document.body, '.o_Activity_grantAccessButton', "should have grant access button");
|
||||
assert.containsOnce(document.body, '.o_ActivityView', "should have activity component");
|
||||
assert.containsOnce(document.body, '.o_ActivityView_grantAccessButton', "should have grant access button");
|
||||
|
||||
document.querySelector('.o_Activity_grantAccessButton').click();
|
||||
document.querySelector('.o_ActivityView_grantAccessButton').click();
|
||||
assert.verifySteps(['access_grant'], "Grant button should trigger the right rpc call");
|
||||
});
|
||||
|
||||
@@ -75,10 +75,10 @@ QUnit.test('refuse course access', async function (assert) {
|
||||
views: [[false, 'form']],
|
||||
});
|
||||
|
||||
assert.containsOnce(document.body, '.o_Activity', "should have activity component");
|
||||
assert.containsOnce(document.body, '.o_Activity_refuseAccessButton', "should have refuse access button");
|
||||
assert.containsOnce(document.body, '.o_ActivityView', "should have activity component");
|
||||
assert.containsOnce(document.body, '.o_ActivityView_refuseAccessButton', "should have refuse access button");
|
||||
|
||||
document.querySelector('.o_Activity_refuseAccessButton').click();
|
||||
document.querySelector('.o_ActivityView_refuseAccessButton').click();
|
||||
assert.verifySteps(['access_refuse'], "refuse button should trigger the right rpc call");
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user