示例#1
0
 def setUp(self):
     super(TestWebsiteSaleCheckoutAddress, self).setUp()
     self.website = self.env['website'].browse(1)
     self.country_id = self.env['res.country'].search([], limit=1).id
     self.WebsiteSaleController = WebsiteSale()
     self.default_address_values = {
         'name': 'a res.partner address', 'email': '*****@*****.**', 'street': 'ooo',
         'city': 'ooo', 'country_id': self.country_id, 'submitted': 1,
     }
class WebsiteSaleVisitorTests(TransactionCase):
    def setUp(self):
        super().setUp()
        self.website = self.env['website'].browse(1)
        self.WebsiteSaleController = WebsiteSale()
        self.cookies = {}

    def test_create_visitor_on_tracked_product(self):
        self.WebsiteSaleController = WebsiteSale()
        Visitor = self.env['website.visitor']
        Track = self.env['website.track']

        self.assertEqual(len(Visitor.search([])), 0,
                         "No visitor at the moment")
        self.assertEqual(len(Track.search([])), 0, "No track at the moment")

        product = self.env.ref('product.product_product_7')

        with MockRequest(self.env, website=self.website):
            self.cookies = self.WebsiteSaleController.products_recently_viewed_update(
                product.id)

        self.assertEqual(
            len(Visitor.search([])), 1,
            "A visitor should be created after visiting a tracked product")
        self.assertEqual(
            len(Track.search([])), 1,
            "A track should be created after visiting a tracked product")

        with MockRequest(self.env, website=self.website, cookies=self.cookies):
            self.WebsiteSaleController.products_recently_viewed_update(
                product.id)

        self.assertEqual(
            len(Visitor.search([])), 1,
            "No visitor should be created after visiting another tracked product"
        )
        self.assertEqual(
            len(Track.search([])), 1,
            "No track should be created after visiting the same tracked product before 30 min"
        )

        product = self.env.ref('product.product_product_6')
        with MockRequest(self.env, website=self.website, cookies=self.cookies):
            self.WebsiteSaleController.products_recently_viewed_update(
                product.id)

        self.assertEqual(
            len(Visitor.search([])), 1,
            "No visitor should be created after visiting another tracked product"
        )
        self.assertEqual(
            len(Track.search([])), 2,
            "A track should be created after visiting another tracked product")
示例#3
0
 def slider_data(self, **kwargs):
     slider_id = kwargs.get('slider_id', False)
     filter_id = kwargs.get('filter_id', False)
     slider_obj = request.env['slider'].sudo().search([('id', '=',
                                                        int(slider_id))])
     vals = {}
     if slider_obj:
         if slider_obj.slider_type == 'product':
             filter = slider_obj.slider_filter_ids[
                 0] if not filter_id else request.env['slider.filter'].sudo(
                 ).search([('id', '=', int(filter_id))])
             if filter.filter_id.domain:
                 compute_currency, pricelist_context, pricelist = WebsiteSale(
                 )._get_compute_currency_and_context()
                 domain = safe_eval(filter.filter_id.domain)
                 domain += [
                     '|', ('website_id', '=', None),
                     ('website_id', '=', request.website.id),
                     ('website_published', '=', True)
                 ]
                 product = request.env['product.template'].sudo().search(
                     domain, limit=slider_obj.slider_limit)
                 vals = {
                     'slider_obj':
                     slider_obj,
                     'filter_data':
                     product,
                     'compute_currency':
                     compute_currency,
                     'active_filter_data':
                     filter_id
                     if filter_id else slider_obj.slider_filter_ids[0].id,
                     'is_default':
                     False if filter_id else True
                 }
             tmplt_external_id = slider_obj.slider_style_id.get_external_id(
             ).get(slider_obj.slider_style_id.id) + "_template"
             tmplt = request.env['ir.ui.view'].sudo().search([
                 ('key', '=', tmplt_external_id)
             ])
             if tmplt:
                 response = http.Response(template=tmplt_external_id,
                                          qcontext=vals)
                 return response.render()
             else:
                 return False
         else:
             domain = [('website_id', 'in',
                        (False, request.website.get_current_website().id)),
                       ('parent_id', '=', False)]
             category = request.env['product.public.category'].sudo(
             ).search(domain, limit=slider_obj.slider_limit)
             return request.env.ref(
                 "emipro_theme_base.theme_category_carousel").render(
                     {'object': category})
示例#4
0
class TestWebsiteSaleCheckoutAddress(eagle.tests.TransactionCase):
    ''' The goal of this method class is to test the address management on
        the checkout (new/edit billing/shipping, company_id, website_id..).
    '''
    def setUp(self):
        super(TestWebsiteSaleCheckoutAddress, self).setUp()
        self.website = self.env['website'].browse(1)
        self.country_id = self.env['res.country'].search([], limit=1).id
        self.WebsiteSaleController = WebsiteSale()
        self.default_address_values = {
            'name': 'a res.partner address',
            'email': '*****@*****.**',
            'street': 'ooo',
            'city': 'ooo',
            'country_id': self.country_id,
            'submitted': 1,
        }

    def _create_so(self, partner_id=None):
        return self.env['sale.order'].create({
            'partner_id':
            partner_id,
            'website_id':
            self.website.id,
            'order_line': [(0, 0, {
                'product_id':
                self.env['product.product'].create({
                    'name': 'Product A',
                    'list_price': 100
                }).id,
                'name':
                'Product A',
            })]
        })

    def _get_last_address(self, partner):
        ''' Useful to retrieve the last created shipping address '''
        return partner.child_ids.sorted('id', reverse=True)[0]

    # TEST WEBSITE
    def test_01_create_shipping_address_specific_user_account(self):
        ''' Ensure `website_id` is correctly set (specific_user_account) '''
        p = self.env.user.partner_id
        so = self._create_so(p.id)

        with MockRequest(self.env, website=self.website, sale_order_id=so.id):
            self.WebsiteSaleController.address(**self.default_address_values)
            self.assertFalse(
                self._get_last_address(p).website_id,
                "New shipping address should not have a website set on it (no specific_user_account)."
            )

            self.website.specific_user_account = True

            self.WebsiteSaleController.address(**self.default_address_values)
            self.assertEqual(
                self._get_last_address(p).website_id, self.website,
                "New shipping address should have a website set on it (specific_user_account)."
            )

    # TEST COMPANY
    def _setUp_multicompany_env(self):
        ''' Have 2 companies A & B.
            Have 1 website 1 which company is B
            Have admin on company A
        '''
        self.company_a = self.env['res.company'].create({
            'name': 'Company A',
        })
        self.company_b = self.env['res.company'].create({
            'name': 'Company B',
        })
        self.company_c = self.env['res.company'].create({
            'name': 'Company C',
        })
        self.website.company_id = self.company_b
        self.env.user.company_id = self.company_a

        self.demo_user = self.env.ref('base.user_demo')
        self.demo_user.company_ids += self.company_c
        self.demo_user.company_id = self.company_c
        self.demo_partner = self.demo_user.partner_id

    def test_02_demo_address_and_company(self):
        ''' This test ensure that the company_id of the address (partner) is
            correctly set and also, is not wrongly changed.
            eg: new shipping should use the company of the website and not the
                one from the admin, and editing a billing should not change its
                company.
        '''
        self._setUp_multicompany_env()
        so = self._create_so(self.demo_partner.id)

        env = api.Environment(self.env.cr, self.demo_user.id, {})
        # change also website env for `sale_get_order` to not change order partner_id
        with MockRequest(env,
                         website=self.website.with_env(env),
                         sale_order_id=so.id):
            # 1. Logged in user, new shipping
            self.WebsiteSaleController.address(**self.default_address_values)
            new_shipping = self._get_last_address(self.demo_partner)
            self.assertTrue(
                new_shipping.company_id != self.env.user.company_id,
                "Logged in user new shipping should not get the company of the sudo() neither the one from it's partner.."
            )
            self.assertEqual(new_shipping.company_id, self.website.company_id,
                             ".. but the one from the website.")

            # 2. Logged in user, edit billing
            self.default_address_values['partner_id'] = self.demo_partner.id
            self.WebsiteSaleController.address(**self.default_address_values)
            self.assertEqual(
                self.demo_partner.company_id, self.company_c,
                "Logged in user edited billing (the partner itself) should not get its company modified."
            )

    def test_03_public_user_address_and_company(self):
        ''' Same as test_02 but with public user '''
        self._setUp_multicompany_env()
        so = self._create_so(self.website.user_id.partner_id.id)

        env = api.Environment(self.env.cr, self.website.user_id.id, {})
        # change also website env for `sale_get_order` to not change order partner_id
        with MockRequest(env,
                         website=self.website.with_env(env),
                         sale_order_id=so.id):
            # 1. Public user, new billing
            self.default_address_values['partner_id'] = -1
            self.WebsiteSaleController.address(**self.default_address_values)
            new_partner = so.partner_id
            self.assertNotEqual(
                new_partner, self.website.user_id.partner_id,
                "New billing should have created a new partner and assign it on the SO"
            )
            self.assertEqual(
                new_partner.company_id, self.website.company_id,
                "The new partner should get the company of the website")

            # 2. Public user, edit billing
            self.default_address_values['partner_id'] = new_partner.id
            self.WebsiteSaleController.address(**self.default_address_values)
            self.assertEqual(
                new_partner.company_id, self.website.company_id,
                "Public user edited billing (the partner itself) should not get its company modified."
            )
 def setUp(self):
     super().setUp()
     self.website = self.env['website'].browse(1)
     self.WebsiteSaleController = WebsiteSale()
     self.cookies = {}