113 lines
5.2 KiB
Python
113 lines
5.2 KiB
Python
import re
|
|
|
|
from odoo.tests.common import HttpCase, TransactionCase
|
|
from lxml import html
|
|
|
|
|
|
class TestHelpdesk(HttpCase):
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.team_without_web_form = self.env['helpdesk.team'].create({
|
|
'name': 'Team without Web Form',
|
|
'is_published': True,
|
|
})
|
|
|
|
def test_create_ticket_portal(self):
|
|
# Only one team has enabled the website form then Help website menu should open the Ticket Submit page
|
|
# If that team has enabled Knowledge then it should open Knowledge page
|
|
team = self.env['helpdesk.team'].search([('use_website_helpdesk_form', '=', True)], limit=1)
|
|
self.env['helpdesk.team'].search([('id', '!=', team.id)]).use_website_helpdesk_form = False
|
|
response = self.url_open('/helpdesk')
|
|
self.assertEqual(response.status_code, 200)
|
|
expected_string = "How can we help you?" if team.use_website_helpdesk_knowledge else "Submit a Ticket"
|
|
search_result = re.search(expected_string.encode(), response.content).group().decode()
|
|
self.assertEqual(search_result, expected_string)
|
|
|
|
# multiple teams have enabled the website form then Help website menu should refere to the Team selection page
|
|
self.team_without_web_form.use_website_helpdesk_form = True
|
|
other_response = self.url_open('/helpdesk')
|
|
self.assertEqual(response.status_code, 200)
|
|
expected_string = "Select your Team for help"
|
|
search_result = re.search(expected_string.encode(), other_response.content).group().decode()
|
|
self.assertEqual(search_result, expected_string)
|
|
|
|
def test_helpdesk_team_visibility(self):
|
|
test_website = self.env['website'].create({'name': 'test website', 'sequence': 5})
|
|
new_teams = [('Test team1', self.env.ref('website.default_website')),
|
|
('Test team2', test_website),
|
|
('Test team3', test_website)]
|
|
for name, website in new_teams:
|
|
self.env['helpdesk.team'].create([{
|
|
'name': name,
|
|
'use_website_helpdesk_form': True,
|
|
'website_id': website.id,
|
|
'is_published': True,
|
|
}])
|
|
response = self.url_open('/helpdesk')
|
|
tree = html.fromstring(response.content)
|
|
team_names = tree.xpath('//article[contains(@class, "team_card")]')
|
|
|
|
self.assertEqual(len(team_names), 2, "Expected exactly 2 helpdesk teams to be rendered")
|
|
|
|
|
|
class TestHelpdeskMenu(TransactionCase):
|
|
def test_menu_item_visibility(self):
|
|
website = self.env['website'].create({
|
|
'name': 'test website'
|
|
})
|
|
public_user = self.env.ref('base.public_user')
|
|
non_helpdesk_menu = self.env['website.menu'].create({
|
|
'name': 'Menu with helpdesk in URL',
|
|
'url': '/helpdesk-123',
|
|
'website_id': website.id,
|
|
})
|
|
team = self.env['helpdesk.team'].create({
|
|
'name': 'Test team',
|
|
'use_website_helpdesk_form': True,
|
|
'website_id': website.id,
|
|
})
|
|
|
|
non_helpdesk_menu.invalidate_recordset(["is_visible"])
|
|
self.assertTrue(non_helpdesk_menu.with_user(public_user).is_visible, "Item with helpdesk in URL should stay visible.")
|
|
self.assertTrue(team.website_menu_id.is_visible)
|
|
team.use_website_helpdesk_form = False
|
|
self.assertFalse(team.website_menu_id.is_visible)
|
|
|
|
def test_ticket_base_url_uses_team_website(self):
|
|
""" A ticket's base URL must follow its team's website, not the company default,
|
|
so notification links target the website the ticket was created from. """
|
|
websites = self.env['website'].create([
|
|
{'name': 'W1', 'domain': 'https://w1.example.com', 'sequence': 1},
|
|
{'name': 'W2', 'domain': 'https://w2.example.com', 'sequence': 2},
|
|
])
|
|
team_w2 = self.env['helpdesk.team'].create({
|
|
'name': 'Team W2',
|
|
'use_website_helpdesk_form': True,
|
|
'website_id': websites[1].id,
|
|
})
|
|
ticket = self.env['helpdesk.ticket'].create({
|
|
'name': 'Test ticket',
|
|
'team_id': team_w2.id,
|
|
})
|
|
self.assertEqual(ticket.get_base_url(), 'https://w2.example.com')
|
|
|
|
def test_archive_multiple_teams_different_websites(self):
|
|
""" Test archiving multiple helpdesk teams linked to different websites. """
|
|
websites = self.env['website'].create([{'name': 'W1'}, {'name': 'W2'}])
|
|
|
|
teams = self.env['helpdesk.team'].create([{
|
|
'name': f'Team of {website.name}',
|
|
'use_website_helpdesk_form': True,
|
|
'website_id': website.id,
|
|
} for website in websites
|
|
])
|
|
|
|
teams.write({'active': False})
|
|
self.assertFalse(any(t.active for t in teams), "Both teams should be archived without errors.")
|
|
|
|
# Verify that a website menu was created for each team and is linked to the correct website
|
|
for i, team in enumerate(teams):
|
|
self.assertTrue(team.website_menu_id and team.website_menu_id.exists(), f"Expected a website menu to be created for {team.name}")
|
|
self.assertEqual(team.website_menu_id.website_id, websites[i])
|
|
self.assertNotEqual(teams[0].website_menu_id.id, teams[1].website_menu_id.id, "Each team should have its own distinct menu")
|