mirror of
https://github.com/bringout/oca-ocb-hr.git
synced 2026-04-26 10:32:07 +02:00
19.0 vanilla
This commit is contained in:
parent
a1137a1456
commit
e1d89e11e3
2789 changed files with 1093187 additions and 605897 deletions
|
|
@ -0,0 +1,16 @@
|
|||
import { hrModels } from "@hr/../tests/hr_test_helpers";
|
||||
import { defineModels } from "@web/../tests/web_test_helpers";
|
||||
import { HrEmployeeSkill } from "./mock_server/mock_models/hr_employee_skill";
|
||||
import { HrSkill } from "./mock_server/mock_models/hr_skill";
|
||||
import { M2oAvatarEmployee } from "./mock_server/mock_models/m2o_avatar_employee";
|
||||
|
||||
export function defineHrSkillModels() {
|
||||
return defineModels(hrSkillModels);
|
||||
}
|
||||
|
||||
export const hrSkillModels = {
|
||||
...hrModels,
|
||||
HrEmployeeSkill,
|
||||
HrSkill,
|
||||
M2oAvatarEmployee,
|
||||
};
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
import { click, contains, start, startServer } from "@mail/../tests/mail_test_helpers";
|
||||
import { mountView, onRpc } from "@web/../tests/web_test_helpers";
|
||||
import { describe, expect, test } from "@odoo/hoot";
|
||||
import { queryAttribute } from "@odoo/hoot-dom";
|
||||
import { defineHrSkillModels } from "@hr_skills/../tests/hr_skills_test_helpers";
|
||||
|
||||
describe.current.tags("desktop");
|
||||
defineHrSkillModels();
|
||||
|
||||
test("many2one_avatar_employee widget in kanban view with skills on avatar card", async () => {
|
||||
const pyEnv = await startServer();
|
||||
const [java, tigrinya] = pyEnv["hr.skill"].create([{ name: "Java" }, { name: "Tigrinya" }]);
|
||||
const pierrePid = pyEnv["res.partner"].create({ name: "Pierre" });
|
||||
const pierreUid = pyEnv["res.users"].create({ name: "Pierre", partner_id: pierrePid });
|
||||
const pierreEid = pyEnv["hr.employee"].create({
|
||||
name: "Pierre",
|
||||
user_id: pierreUid,
|
||||
user_partner_id: pierrePid,
|
||||
});
|
||||
const [javaForPierre, tigrinyaForPierre] = pyEnv["hr.employee.skill"].create([
|
||||
{ employee_id: pierreEid, skill_id: java },
|
||||
{ employee_id: pierreEid, skill_id: tigrinya },
|
||||
]);
|
||||
pyEnv["hr.employee.public"].create({
|
||||
name: "Pierre",
|
||||
employee_skill_ids: [javaForPierre, tigrinyaForPierre],
|
||||
});
|
||||
pyEnv["m2o.avatar.employee"].create([{ employee_id: pierreEid }]);
|
||||
await start();
|
||||
|
||||
onRpc("hr.employee", "get_avatar_card_data", (params) => {
|
||||
const resourceIdArray = params.args[0];
|
||||
const resourceId = resourceIdArray[0];
|
||||
const resources = pyEnv['hr.employee.public'].read([resourceId]);
|
||||
const result = resources.map(resource => ({
|
||||
name: resource.name,
|
||||
role_ids: resource.role_ids,
|
||||
email:resource.email,
|
||||
phone: resource.phone,
|
||||
user_id: resource.user_id,
|
||||
employee_skill_ids: resource.employee_skill_ids
|
||||
}));
|
||||
return result;
|
||||
});
|
||||
await mountView({
|
||||
type: "kanban",
|
||||
resModel: "m2o.avatar.employee",
|
||||
arch: `<kanban>
|
||||
<templates>
|
||||
<t t-name="card">
|
||||
<field name="employee_id" widget="many2one_avatar_employee"/>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>`,
|
||||
});
|
||||
await contains(".o_m2o_avatar", { count: 1 });
|
||||
await contains(".o_field_many2one_avatar_employee img", { count: 1 });
|
||||
expect(
|
||||
queryAttribute(".o_kanban_record .o_field_many2one_avatar_employee img", "data-src")
|
||||
).toBe(`/web/image/hr.employee/${pierreEid}/avatar_128`);
|
||||
await click(".o_kanban_record .o_m2o_avatar > img");
|
||||
await contains(".o_avatar_card");
|
||||
await contains(".o_avatar_card .o_employee_skills_tags > .o_tag", { count: 2 });
|
||||
});
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
import { models } from "@web/../tests/web_test_helpers";
|
||||
|
||||
export class HrEmployeeSkill extends models.ServerModel {
|
||||
_name = "hr.employee.skill";
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
import { models } from "@web/../tests/web_test_helpers";
|
||||
|
||||
export class HrSkill extends models.ServerModel {
|
||||
_name = "hr.skill";
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import { fields, models } from "@web/../tests/web_test_helpers";
|
||||
|
||||
export class M2oAvatarEmployee extends models.Model {
|
||||
_name = "m2o.avatar.employee";
|
||||
|
||||
employee_id = fields.Many2one({ string: "Employee", relation: "hr.employee" });
|
||||
}
|
||||
|
|
@ -1,147 +1,169 @@
|
|||
/** @odoo-module **/
|
||||
import { registry } from "@web/core/registry";
|
||||
import { stepUtils } from "@web_tour/tour_utils";
|
||||
|
||||
import tour from 'web_tour.tour';
|
||||
|
||||
tour.register('hr_skills_tour', {
|
||||
test: true,
|
||||
url: '/web',
|
||||
}, [
|
||||
tour.stepUtils.showAppsMenuItem(),
|
||||
{
|
||||
content: "Open Employees app",
|
||||
trigger: ".o_app[data-menu-xmlid='hr.menu_hr_root']",
|
||||
},
|
||||
{
|
||||
content: "Create a new employee",
|
||||
trigger: ".o-kanban-button-new",
|
||||
},
|
||||
{
|
||||
content: "Pick a name",
|
||||
trigger: ".o_field_widget[name='name'] input",
|
||||
run: "text Jony McHallyFace",
|
||||
},
|
||||
{
|
||||
content: "Save",
|
||||
trigger: ".o_form_button_save",
|
||||
},
|
||||
{
|
||||
content: "Add a new Resume experience",
|
||||
trigger: ".o_field_resume_one2many tr.o_resume_group_header button.btn-secondary",
|
||||
},
|
||||
{
|
||||
content: "Enter some company name",
|
||||
trigger: ".modal-body .o_field_widget[name='name'] input",
|
||||
run: "text Mamie Rock",
|
||||
},
|
||||
{
|
||||
content: "Set start date",
|
||||
trigger: ".o_field_widget[name='date_start'] input",
|
||||
run: "text 12/05/2017",
|
||||
},
|
||||
{
|
||||
content: "Give some description",
|
||||
trigger: ".o_field_widget[name='description'] textarea",
|
||||
run: "text Sang some songs and played some music",
|
||||
},
|
||||
{
|
||||
content: "Save it",
|
||||
trigger: ".o_form_button_save",
|
||||
in_modal: true,
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Edit newly created experience",
|
||||
trigger: ".o_resume_line_title:contains('Mamie Rock')",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Change type",
|
||||
trigger: ".o_field_widget[name='line_type_id'] input",
|
||||
run: "text Experience",
|
||||
},
|
||||
{
|
||||
content: "Choose experience",
|
||||
trigger: '.ui-autocomplete .ui-menu-item a:contains("Experience")',
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Save experience change",
|
||||
trigger: ".o_form_button_save",
|
||||
in_modal: true,
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Add a new Skill",
|
||||
trigger: ".o_field_skills_one2many button:contains('Create a new entry')",
|
||||
},
|
||||
{
|
||||
content: "Select Music",
|
||||
trigger: ".o_field_widget[name='skill_type_id'] label:contains('Best Music')",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Select a song",
|
||||
trigger: ".o_field_widget[name='skill_id'] input",
|
||||
run: "text Fortun",
|
||||
},
|
||||
{
|
||||
content: "Choose the song",
|
||||
trigger: '.ui-autocomplete .ui-menu-item a:contains("Fortunate Son")',
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Select a level",
|
||||
trigger: ".o_field_widget[name='skill_level_id'] input",
|
||||
run: "text Level",
|
||||
},
|
||||
{
|
||||
content: "Choose the level",
|
||||
trigger: '.ui-autocomplete .ui-menu-item a:contains("Level 2")',
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Save new skill",
|
||||
trigger: ".o_form_button_save",
|
||||
in_modal: true,
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Add a new Skill",
|
||||
trigger: ".o_field_skills_one2many button:contains('ADD')",
|
||||
},
|
||||
{
|
||||
content: "Select a song", // "Music" should be already selected
|
||||
trigger: ".o_field_widget[name='skill_id'] input",
|
||||
run: "text Mary",
|
||||
},
|
||||
{
|
||||
content: "Choose the song",
|
||||
trigger: '.ui-autocomplete .ui-menu-item a:contains("Oh Mary")',
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Select a level",
|
||||
trigger: ".o_field_widget[name='skill_level_id'] input",
|
||||
run: "text Level 7",
|
||||
},
|
||||
{
|
||||
content: "Choose the level",
|
||||
trigger: '.ui-autocomplete .ui-menu-item a:contains("Level 7")',
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Save new skill",
|
||||
trigger: ".o_form_button_save",
|
||||
in_modal: true,
|
||||
run: "click",
|
||||
},
|
||||
...tour.stepUtils.saveForm({
|
||||
content: "save Form",
|
||||
extra_trigger: 'td:containsExact("Oh Mary")',
|
||||
}),
|
||||
{
|
||||
content: "Go back to employees",
|
||||
trigger: 'a[data-menu-xmlid="hr.menu_hr_root"]',
|
||||
run: "click",
|
||||
}
|
||||
]);
|
||||
registry.category("web_tour.tours").add("hr_skills_tour", {
|
||||
url: "/odoo",
|
||||
steps: () => [
|
||||
stepUtils.showAppsMenuItem(),
|
||||
{
|
||||
content: "Open Employees app",
|
||||
trigger: ".o_app[data-menu-xmlid='hr.menu_hr_root']",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Create a new employee",
|
||||
trigger: ".o-kanban-button-new",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Pick a name",
|
||||
trigger: ".o_field_widget[name='name'] input",
|
||||
run: "edit Jony McHallyFace",
|
||||
},
|
||||
{
|
||||
content: "Save",
|
||||
trigger: ".o_form_button_save",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Add Experience",
|
||||
trigger: ".nav-link:contains('Resume')",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Add a new Resume experience",
|
||||
trigger: ".o_field_resume_one2many button.btn-secondary",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Enter some company name",
|
||||
trigger:
|
||||
".modal:contains(new resume line) .modal-body .o_field_widget[name='name'] input",
|
||||
run: "edit Mamie Rock",
|
||||
},
|
||||
{
|
||||
trigger: ".modal:contains(new resume line) .o_field_widget[name='date_start'] button",
|
||||
content: "open date picker",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Set start date",
|
||||
trigger: ".modal:contains(new resume line) .o_field_widget[name='date_start'] input",
|
||||
run: "edit 12/05/2017",
|
||||
},
|
||||
{
|
||||
content: "Give some description",
|
||||
trigger: `.modal:contains(new resume line) .o_field_html[name='description'] div.o-paragraph`,
|
||||
run: "editor Sang some songs and played some music",
|
||||
},
|
||||
{
|
||||
content: "Save it",
|
||||
trigger: ".modal:contains(new resume line) .o_form_button_save:contains(save)",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
trigger: "body:not(:has(.modal:contains(new resume line)))",
|
||||
},
|
||||
{
|
||||
content: "Edit newly created experience",
|
||||
trigger: ".o_resume_line_title:contains(Mamie Rock)",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Change type",
|
||||
trigger: ".modal:contains(new resume line) .o_field_widget[name='line_type_id'] .o_selection_badge:contains(Other Experience)",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Save experience change",
|
||||
trigger: ".modal:contains(new resume line) .o_form_button_save:contains(save)",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
trigger: "body:not(:has(.modal:contains(new resume line)))",
|
||||
},
|
||||
{
|
||||
content: "Add a new Skill",
|
||||
trigger: ".o_field_skills_one2many button:contains('Pick a skill from the list')",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Select Music",
|
||||
trigger: ".o_field_widget[name='skill_type_id'] span:contains('Best Music')",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Choose the song",
|
||||
trigger: ".o_field_widget[name='skill_id'] span:contains('Fortunate Son')",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Choose the level",
|
||||
trigger: ".o_field_widget[name='skill_level_id'] span:contains('Level 2')",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Save new skill",
|
||||
trigger: ".modal:contains(update skills) .o_form_button_save:contains(save & close)",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content:
|
||||
"Wait the new skill is completely saved. Ensure also the modal is closed before open a new one.",
|
||||
trigger: "body:not(:has(.modal))",
|
||||
},
|
||||
{
|
||||
content: "Check if item is added",
|
||||
trigger: ".o_data_row td.o_data_cell:contains('Fortunate Son')",
|
||||
},
|
||||
{
|
||||
content: "Add a new Skill",
|
||||
trigger: ".o_field_skills_one2many button:contains('ADD')",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Select Certification",
|
||||
trigger: ".o_field_widget[name='skill_type_id'] span:contains('Music Certification')",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Choose the instrument",
|
||||
trigger: ".o_field_widget[name='skill_id'] span:contains('Piano')",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Choose the level",
|
||||
trigger: "div[name='valid_from'] button",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Choose the level",
|
||||
trigger: ".o_field_widget[name='valid_from'] input",
|
||||
run: "edit 02/03/2025",
|
||||
},
|
||||
{
|
||||
content: "Choose the level",
|
||||
trigger: ".o_field_widget[name='valid_to']",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Choose the level",
|
||||
trigger: ".o_field_widget[name='valid_to'] input",
|
||||
run: "edit 03/04/2025",
|
||||
},
|
||||
{
|
||||
content: "Save new skill",
|
||||
trigger: ".modal:contains(update skills) .o_form_button_save:contains(save & close)",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Wait the new skill is completely saved",
|
||||
trigger: "body:not(:has(.modal))",
|
||||
},
|
||||
{
|
||||
content: "Check if item is added",
|
||||
trigger: ".o_data_row td.o_data_cell:contains('Piano')",
|
||||
},
|
||||
...stepUtils.saveForm(),
|
||||
],
|
||||
});
|
||||
|
|
|
|||
|
|
@ -0,0 +1,87 @@
|
|||
import { registry } from "@web/core/registry";
|
||||
import { stepUtils } from "@web_tour/tour_utils";
|
||||
|
||||
registry.category("web_tour.tours").add("hr_skills_type_tour", {
|
||||
url: "/odoo",
|
||||
steps: () => [
|
||||
stepUtils.showAppsMenuItem(),
|
||||
{
|
||||
content: "Open Employees app",
|
||||
trigger: ".o_app[data-menu-xmlid='hr.menu_hr_root']",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Open skill type menu",
|
||||
trigger: "[data-menu-xmlid='hr.menu_human_resources_configuration']",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Open skill type menu",
|
||||
trigger: "[data-menu-xmlid='hr_skills.hr_skill_type_menu']",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Create a skill type",
|
||||
trigger: ".o_list_button_add",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
content: "Write skill type name",
|
||||
trigger: ".o_field_widget[name='name'] input",
|
||||
run: "edit Cooking Skill",
|
||||
},
|
||||
{
|
||||
trigger: "div[name=skill_ids] .o_field_x2many_list_row_add a",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
trigger: "div[name=skill_ids] div[name=name] input",
|
||||
run: "edit Macaroon",
|
||||
},
|
||||
{
|
||||
trigger: "div[name=skill_level_ids] .o_field_x2many_list_row_add a",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
trigger: "div[name=skill_level_ids] div[name=name] input",
|
||||
run: "edit Beginner",
|
||||
},
|
||||
{
|
||||
trigger: "div[name=skill_level_ids] div[name=default_level] input[type='checkbox']",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
trigger: "div[name=skill_level_ids] .o_field_x2many_list_row_add a",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
trigger: "tr:nth-child(2).o_selected_row div[name=name] input",
|
||||
run: "edit Intermediate",
|
||||
},
|
||||
{
|
||||
trigger: "tr:nth-child(2).o_selected_row [name=default_level] input[type='checkbox']",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
trigger: "div[name=skill_level_ids] .o_field_x2many_list_row_add a",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
trigger: "tr:nth-child(3).o_selected_row div[name=name] input",
|
||||
run: "edit Expert",
|
||||
},
|
||||
{
|
||||
trigger: "tr:nth-child(3).o_selected_row [name=default_level] input[type='checkbox']",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
trigger: "tr:nth-child(1) [name=default_level] input[type='checkbox']",
|
||||
run: "click",
|
||||
},
|
||||
{
|
||||
trigger: "tr:nth-child(2) [name=default_level] input[type='checkbox']",
|
||||
run: "click",
|
||||
},
|
||||
...stepUtils.saveForm(),
|
||||
],
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue