diff --git a/addons/crm/__openerp__.py b/addons/crm/__openerp__.py index c2dd5027b71..c3f28c6a66f 100644 --- a/addons/crm/__openerp__.py +++ b/addons/crm/__openerp__.py @@ -126,6 +126,11 @@ Creates a dashboard for CRM that includes: 'test/test_crm_recurrent_meeting.yml', 'test/test_crm_stage_changes.yml', 'test/test_crm_recurrent_meeting_case2.yml', + 'test/test_crm_lead_case2.yml', + 'test/test_crm_opportunity_case2.yml', + 'test/test_crm_phonecall_case2.yml', + 'test/test_crm_partner2opportunity.yml', + 'test/test_crm_segmentation.yml', ], 'installable': True, 'active': False, diff --git a/addons/crm/test/test_crm_lead.yml b/addons/crm/test/test_crm_lead.yml index 52472a9d9e8..6a954939e04 100644 --- a/addons/crm/test/test_crm_lead.yml +++ b/addons/crm/test/test_crm_lead.yml @@ -1,8 +1,18 @@ -- | +- | In order to test the CRM in OpenERP, I will do a customer qualification process that starts with a fist contact with a customer (a lead), which will be converted to a business opportunity and a partner. +- + I check installer report. +- + !record {model: base.setup.installer , id: base_action_rule_0_1}: + name: Test_action +- + I create the view at the time of setup. +- + !python {model: base.setup.installer}: | + self.fields_view_get(cr, uid,view_id=None, view_type='form', context=None, toolbar=False, submenu=False) - | In order to test the flow, I create a two new users "user_crm" and I assign the group "salesman". @@ -25,26 +35,36 @@ email_from: info@mycustomer.com name: New Customer partner_name: Capegemini + partner_id: base.res_partner_9 phone: (855) 924-4364 mobile: (333) 715-1450 section_id: crm.section_sales_department referred: False - | - I check that the lead is in 'draft' state, + I check that the lead is in 'draft' state. - !assert {model: crm.lead, id: crm_lead_newcustomer0, string: Lead in Draft}: - state == "draft" - - I open lead by click on "Open" button, + I open lead by click on "Open" button. - !python {model: crm.lead}: | self.case_open(cr, uid, [ref("crm_lead_newcustomer0")]) + fields={ + 'day_open': 0.0, + 'day_close': 0.0 + } + self._compute_day(cr, uid, [ref("crm_lead_newcustomer0")], fields, context) - | I check that lead is now in 'open' state. - !assert {model: crm.lead, id: crm_lead_newcustomer0, string: Lead in open state}: - state == "open" - +- + I search id for case object. +- + !python {model: crm.case.categ}: | + self._find_object_id(cr, uid, context) - | As the lead seems to be a real business opportunity, I will convert it to a partner @@ -56,16 +76,40 @@ assert action['res_model'] == 'crm.lead2opportunity.partner' - | - Now, select "create a new partner" option in this wizard. + I select "create a new partner" option. - !record {model: crm.lead2opportunity.partner, id: crm_lead2opportunity_partner_create_0}: action: 'create' name: 'convert' - - Then, Click on "Create Opportunity" button of this wizard. + Then, Click on "Create Opportunity" button. - !python {model: crm.lead2opportunity.partner}: | self.action_apply(cr, uid, [ref("crm_lead2opportunity_partner_create_0")], {'active_ids': [ref("crm_lead_newcustomer0")], 'active_id': ref("crm_lead_newcustomer0")}) +- + | + I select "Link to an existing partner" option. +- + !record {model: crm.lead2opportunity.partner, id: crm_lead2opportunity_partner_create_1}: + action: 'exist' + name: 'existing partner' +- + Then, Click on "Create Opportunity" button. +- + !python {model: crm.lead2opportunity.partner}: | + self.action_apply(cr, uid, [ref("crm_lead2opportunity_partner_create_1")], {'active_ids': [ref("crm_lead_newcustomer0")], 'active_id': ref("crm_lead_newcustomer0")}) +- + | + I select "Do not link to a partner" option. +- + !record {model: crm.lead2opportunity.partner, id: crm_lead2opportunity_partner_create_2}: + action: 'nothing' + name: 'Do not link to a partner' +- + Then, Click on "Create Opportunity" button. +- + !python {model: crm.lead2opportunity.partner}: | + self.action_apply(cr, uid, [ref("crm_lead2opportunity_partner_create_2")], {'active_ids': [ref("crm_lead_newcustomer0")], 'active_id': ref("crm_lead_newcustomer0")}) - | In order to check the opportunity is created or not, I check type. - @@ -73,6 +117,39 @@ lead = self.browse(cr, uid, ref("crm_lead_newcustomer0")) assert lead.type == 'opportunity' +- + I create mass report of lead to opprtunity partner. +- + !record {model: crm.lead2opportunity.partner.mass, id: crm_lead2opportunity_partner_mass0}: + user_ids: + - base.user_root + section_id: crm.section_sales_department +- + Then, execute that mass wizard. +- + !python {model: crm.lead2opportunity.partner.mass}: | + self.mass_convert(cr, uid, [ref("crm_lead2opportunity_partner_mass0")],{'active_ids': [ref("crm_lead_newcustomer0")], 'active_id': ref("crm_lead_newcustomer0")}) +- + I close lead by click on "close" button. +- + !python {model: crm.lead}: | + self.case_close(cr, uid, [ref("crm_lead_newcustomer0")]) +- | + I check that lead is now in 'done' state. +- + !assert {model: crm.lead, id: crm_lead_newcustomer0, string: Lead in done state}: + - state == "done" +- + I cancel lead by click on "cancel" button. +- + !python {model: crm.lead}: | + self.case_cancel(cr, uid, [ref("crm_lead_newcustomer0")]) +- | + I check that lead is now in 'cancel' state. +- + !assert {model: crm.lead, id: crm_lead_newcustomer0, string: Lead in cancel state}: + - state == "cancel" + #- # | # yaml is also not working with smtp server and send new email. @@ -89,4 +166,3 @@ - | I Reply to last Email to lead with some document attached.and check that communication history generated or not. - diff --git a/addons/crm/test/test_crm_lead_case2.yml b/addons/crm/test/test_crm_lead_case2.yml new file mode 100644 index 00000000000..23a654d31a8 --- /dev/null +++ b/addons/crm/test/test_crm_lead_case2.yml @@ -0,0 +1,151 @@ +- + In order to do complete test the CRM in OpenERP, + I will create new full configured record and carry test on it. +- | + I Start by creating "Test Sales Team" with No Unlink. + I create a crm.case.section record. +- + !record {model: crm.case.section, id: crm_case_section_demosalesteam}: + code: DEMO + complete_name: Test Sales Team + name: Test Sales Team + allow_unlink: False + member_ids: + - base.user_admin + stage_ids: + - crm.stage_lead1 + - crm.stage_lead2 + - crm.stage_lead3 + - crm.stage_lead4 + - crm.stage_lead5 + - crm.stage_lead6 + working_hours: 0.0 + resource_calendar_id: resource.timesheet_group1 + parent_id: crm.section_sales_department +- + I assign segmentation. +- + !record {model: res.users, id: res_users_usercrm0}: + context_section_id: crm_case_section_demosalesteam +- | + I create a new lead "Test Customer" and I provide an address to this + demo customer and email "info@democustomer.com" and Also "Test Sales Team". +- + !record {model: crm.lead, id: crm_lead_democustomer}: + email_from: info@democustomer.com + name: Test Customer + partner_name: NotSoTinySARL + phone: (+32).81.81.37.00 + mobile: (+32).81.81.37.00 + section_id: crm_case_section_demosalesteam + referred: False + type: lead +- + I check that the lead is in 'draft' state. +- + !assert {model: crm.lead, id: crm_lead_democustomer, string: Lead in Draft}: + - state == "draft" +- + I create categories. +- + !record {model: crm.case.categ, id: crm_case_categ0}: + name: crm_case_section_demosalesteam + section_id: crm_case_section_demosalesteam +- + I assigning contact detail to the Lead "Test Customer" without address. +- + !python {model: crm.lead}: | + self.onchange_partner_address_id(cr, uid, ref("crm_lead_democustomer"), None, email=False) + +- + I assigning contact detail to the Lead "Test Customer" with address. +- + !python {model: crm.lead}: | + self.onchange_partner_address_id(cr, uid, ref("crm_lead_democustomer"), ref("base.res_partner_address_notsotinysarl0"), email=False) + +- + I selecting email "Opt-out" option for the "Test Customer" Lead. +- + !python {model: crm.lead}: | + self.on_change_optout(cr, uid, ref("crm_lead_democustomer"), True) + +- + I change the Opt-out to Opt-in to show email receive preference. +- + !python {model: crm.lead}: | + self.on_change_optin(cr, uid, ref("crm_lead_democustomer"), True) +- + I open lead by click on "Open" button. +- + !python {model: crm.lead}: | + self.case_open(cr, uid, [ref("crm_lead_democustomer")]) +- + I check that lead "Test Customer" is now in 'open' state. +- + !assert {model: crm.lead, id: crm_lead_democustomer, string: Lead in open state}: + - state == "open" +- + I reset the lead "Test Customer". +- + !python {model: crm.lead}: | + self.case_reset(cr, uid, [ref("crm_lead_democustomer")]) +- + I again opening lead by click on "Open" button. +- + !python {model: crm.lead}: | + self.case_open(cr, uid, [ref("crm_lead_democustomer")]) +- + I setting stage "New" for the lead "Test Customer". +- + !python {model: crm.lead}: | + self.stage_next(cr, uid, [ref("crm_lead_democustomer")], context={'stage_type': 'lead'}) +- + I try to Unlink the Lead "Test Customer" demo Lead. +- + !python {model: crm.lead}: | + try: + self.unlink(cr, uid, [ref("crm_lead_democustomer")]) + except: + pass +- + I setting Lead "Test Customer" to Pending State. +- + !python {model: crm.lead}: | + self.case_pending(cr, uid, [ref("crm_lead_democustomer")]) +- + I check that lead "Test Customer" is now in 'Pending' state. +- + !assert {model: crm.lead, id: crm_lead_democustomer, string: Lead in Pending state}: + - state == "pending" +- + I Escalate the Lead "Test Customer" Parent "Sales Team". +- + !python {model: crm.lead}: | + self.case_escalate(cr, uid, [ref("crm_lead_democustomer")]) +- + I add Internal Note Saying Escalated Reason. +- + !record {model: crm.add.note, id: crm_add_note_0}: + body: Sales Lead Has Been Escalated Due to Some Technical reason to the parent 'Sales + Team' + state: unchanged +- + I click a note button to attach the record. +- + !python {model: crm.add.note}: | + context['active_model'] = "crm.lead" + context['active_ids'] = [ref("crm_lead_democustomer")] + self.action_add(cr, uid, [ref("crm_add_note_0")], context=context) + +- + I Copying this lead "Test Customer" to New Lead. +- + !python {model: crm.lead}: | + self.copy(cr, uid, ref("crm_lead_democustomer")) +- + I checking the Lead Copied or Not. +- + !python {model: crm.lead}: | + sid = self.search(cr, uid, [('name', '=', 'Test Customer'),('state', '=', 'draft')]) + if not sid: + raise AssertionError("Lead is not copied Successfully") diff --git a/addons/crm/test/test_crm_meeting.yml b/addons/crm/test/test_crm_meeting.yml index 9b89fff697b..8d851dd58c7 100644 --- a/addons/crm/test/test_crm_meeting.yml +++ b/addons/crm/test/test_crm_meeting.yml @@ -1,9 +1,9 @@ - | - Now I will test Meetings which may be customer meeting or phonecall meeting or + I will test Meetings which may be customer meeting or phonecall meeting or internal Meeting. - | - I start by creating a new Meeting. -- + I start by creating a new Meeting. +- !record {model: crm.meeting, id: crm_meeting_regardingpresentation0}: categ_id: crm.categ_meet2 date: !eval time.strftime('%Y-%m-%d 16:04:00') @@ -18,14 +18,14 @@ section_id: crm.section_sales_department - | I check that the Meetings is in 'UnConfirmed' state. -- +- !assert {model: crm.meeting, id: crm_meeting_regardingpresentation0}: - - state == "draft" + - state == "draft" - | - I can set reminder on meeting if I put reminder "40 minutes before" + I can set reminder on meeting if I put reminder "40 minutes before" . - | For that, I first create alarm. -- +- !record {model: res.alarm, id: res_alarm_minituesbefore0}: name: 40 minutes before trigger_duration: 40 @@ -33,51 +33,51 @@ trigger_occurs: before trigger_related: start - | - Now I will assign this reminder. - + I will assign this reminder. + - !python {model: crm.meeting}: | self.write(cr, uid, [ref('crm_meeting_regardingpresentation0')], {'alarm_id': ref("res_alarm_minituesbefore0")}) - | In order to check recurrence on meetings I will set Recurrency to Custom - and I set the fields so that the meeting will occur weekly on Monday and Friday 10 times + and I set the fields so that the meeting will occur weekly on Monday and Friday 10 times. - !python {model: crm.meeting}: | self.write(cr, uid, [ref("crm_meeting_regardingpresentation0")], {'fr': 1, 'mo': 1, 'th': 1, 'tu': 1, 'we':1, 'count':10, 'interval': 1, 'rrule_type': 'weekly'}) - + - | I can see from the calendar view that the meeting is scheduled on Monday and Friday - for 10 times, - + for 10 times. + - !python {model: crm.meeting}: | self.fields_view_get(cr, uid, False, 'calendar', context) -- | +- | I will search for one of the recurrent event and count the number of meeting. - !python {model: crm.meeting}: | import time from datetime import datetime, date, timedelta ids = self.search(cr, uid, [('date', '>=', time.strftime('%Y-%m-%d 00:00:00')), ('date', '<=', (datetime.now()+timedelta(31)).strftime('%Y-%m-%d 00:00:00')), ('name', '=', 'Regarding Presentation')], context={'virtual_id': True}) - assert len(ids) == 10 + assert len(ids) == 10 - | - Now If I want to edit meetings information for all occurrence I click on "Edit All" button. + If I want to edit meetings information for all occurrence I click on "Edit All" button. - !python {model: crm.meeting}: | self.write(cr, uid, [ref('crm_meeting_regardingpresentation0')], {'edit_all':'True'},context) -- | - I can see that new meeting form is opened with same value - I change some data for meeting and save it - I can see from meeting's calendar view that all meeting occurrences are changed accordingly -- +- | + I can see that new meeting form is opened with same value. + I change some data for meeting and save it. + I can see from meeting's calendar view that all meeting occurrences are changed accordingly. +- !record {model: crm.meeting, id: crm.crm_meeting_regardingpresentation0}: alarm_id: base_calendar.alarm9 rrule_type: weekly -- | +- | In order to invite people for this meetings, I click on "Invite People" button - I can invite internal user. -- + I can invite internal user. +- !record {model: base_calendar.invite.attendee, id: base_calendar_invite_attendee_0}: type: internal send_mail: False @@ -85,13 +85,13 @@ user_ids: - base.user_demo - - I click on "Invite" button of "Invite attendee" wizard. + I click on "Invite" button of "Invite attendee" wizard. - !python {model: base_calendar.invite.attendee}: | - self.do_invite(cr, uid, [ref('base_calendar_invite_attendee_0')], {'active_id': ref('crm_meeting_regardingpresentation0'), 'model' : 'crm.meeting', 'attendee_field':'attendee_ids'}) + self.do_invite(cr, uid, [ref('base_calendar_invite_attendee_0')], {'active_id': ref('crm_meeting_regardingpresentation0'), 'model' : 'crm.meeting', 'attendee_field':'attendee_ids'}) - | - After direct/indirect confirmation for meetings I can confirm meeting + After direct/indirect confirmation for meetings I can confirm meeting. - !python {model: crm.meeting}: | self.case_open(cr, uid, [ref('crm_meeting_regardingpresentation0')]) diff --git a/addons/crm/test/test_crm_opportunity.yml b/addons/crm/test/test_crm_opportunity.yml index 7640cc67815..734a1cae46c 100644 --- a/addons/crm/test/test_crm_opportunity.yml +++ b/addons/crm/test/test_crm_opportunity.yml @@ -11,18 +11,17 @@ stage_id: crm.stage_lead1 categ_id: crm.categ_oppor2 section_id: crm.section_sales_department - - | I check that the opportunity is in 'New' state. - !assert {model: crm.lead, id: crm_opportunity_abcfuelcounits0}: - state == "draft" -- | - I open opportunity by click on "Open" button, -- - !python {model: crm.lead}: | - self.case_open(cr, uid, [ref("crm_opportunity_abcfuelcounits0")]) +- | + I check that phonecall record is created for that opportunity. +- + !python {model: crm.phonecall}: | + phone_obj = self.pool.get('crm.phonecall') - | I schedule Meeting on this current opportunity by clicking on "schedule Meeting". @@ -33,7 +32,7 @@ - | I can see that Meeting's calendar view is shown. then I click on the date on which I want to schedule meeting. - I fill proper data for that meeting and save it + I fill proper data for that meeting and save it. - !record {model: crm.meeting, id: crm_meeting_abcfuelcounits0}: date: !eval time.strftime('%Y-%m-%d 00:00:00') @@ -51,13 +50,13 @@ I click on "schedule call" button and select planned date for the call. - !record {model: crm.opportunity2phonecall, id: crm_opportunity2phonecall_abcfuelcounits0}: - date: !eval "(datetime.now() + timedelta(1)).strftime('%Y-%m-%d 11:15:00')" + date: !eval "(datetime.now() + timedelta(1)).strftime('%Y-%m-%d 11:15:00')" name: 'ABC FUEL CO 829264 - 10002 units' section_id: crm.section_sales_department user_id: base.user_demo categ_id: crm.categ_phone1 - | - schedule phonecall by apply (action_apply)function of opportunity2phoncall wizard + schedule phonecall by opportunity2phoncall wizard. - !python {model: crm.opportunity2phonecall}: | self.action_apply(cr, uid, [ref('crm_opportunity2phonecall_abcfuelcounits0')], {'active_ids': [ref("crm_opportunity_abcfuelcounits0")]}) @@ -72,10 +71,43 @@ I can see phonecall record after click on "Schedule call" wizard. - !record {model: crm.phonecall, id: crm_phonecall_abcfuelcounits0}: - date: !eval "(datetime.now() + timedelta(1)).strftime('%Y-%m-%d 11:15:00')" + date: !eval "(datetime.now() + timedelta(1)).strftime('%Y-%m-%d 11:15:00')" duration: 3.0 name: 'ABC FUEL CO 829264 - 10002 units' partner_address_id: base.res_partner_address_1 partner_id: base.res_partner_9 section_id: crm.section_sales_department - +- | + I Merge the opportunities. +- + for that create two opportunities first opportunity 'Test FUEL CO'. +- + !record {model: crm.lead, id: crm_opportunity_1}: + email_from: info@balmerinc.be + name: 'Test FUEL CO 829264 - 10002 units' + partner_address_id: base.res_partner_address_1 + partner_id: base.res_partner_9 + probability: 1.0 + stage_id: crm.stage_lead1 + categ_id: crm.categ_oppor2 + section_id: crm.section_sales_department +- + I create the opportunity 'FUEL CO'. +- + !record {model: crm.lead, id: crm_opportunity_2}: + email_from: info@balmerinc.be + name: 'FUEL CO 829264 - 10002 units' + partner_address_id: base.res_partner_address_1 + partner_id: base.res_partner_9 + probability: 1.0 + stage_id: crm.stage_lead1 + categ_id: crm.categ_oppor2 + section_id: crm.section_sales_department +- | + I Merge two Opportunities. +- + !python {model: crm.merge.opportunity}: | + op_list = [ref('crm_opportunity_1'),ref('crm_opportunity_2')] + op_ids=self.pool.get('crm.lead').browse(cr,uid,op_list) + lead_ids = [ref('crm_lead_newcustomer0')] + self.merge(cr, uid, op_ids, {'lead_ids': lead_ids}) diff --git a/addons/crm/test/test_crm_opportunity_case2.yml b/addons/crm/test/test_crm_opportunity_case2.yml new file mode 100644 index 00000000000..dc0dbe517f1 --- /dev/null +++ b/addons/crm/test/test_crm_opportunity_case2.yml @@ -0,0 +1,45 @@ +- | + I start by creating a new Opportunity. And I select partner for opportunity. + I can see that after selecting partner his contact and email is automatically filled. +- + !record {model: crm.lead, id: crm_opportunity_demotestopportunity}: + email_from: info@balmerinc.be + name: 'Demo Test Opportunity' + partner_address_id: base.res_partner_address_1 + partner_id: base.res_partner_9 + probability: 1.0 + categ_id: crm.categ_oppor2 + section_id: crm.section_sales_department + type: opportunity +- + I check that the opportunity is in 'New' state. +- + !assert {model: crm.lead, id: crm_opportunity_demotestopportunity, string: Opportunity in Draft}: + - state == "draft" +- + I open opportunity by click on "Open" button. +- + !python {model: crm.lead}: | + self.case_open(cr, uid, [ref("crm_opportunity_demotestopportunity")]) +- + I change partner of the opportunity. +- + !python {model: crm.lead}: | + self.onchange_partner_id(cr, uid, [ref("crm_opportunity_demotestopportunity")], ref("base.res_partner_agrolait")) + +- + I change Contact Detail of the opportunity. +- + !python {model: crm.lead}: | + self.onchange_partner_address_id(cr, uid,[ref("crm_opportunity_demotestopportunity")], ref("base.res_partner_address_8invoice")) + +- + I change Opportunity to Won State. +- + !python {model: crm.lead}: | + self.case_mark_won(cr, uid, [ref("crm_opportunity_demotestopportunity")]) +- + I check that the opportunity is in 'Done' state. +- + !assert {model: crm.lead, id: crm_opportunity_demotestopportunity, string: Opportunity is Won}: + - state == "done" diff --git a/addons/crm/test/test_crm_partner2opportunity.yml b/addons/crm/test/test_crm_partner2opportunity.yml new file mode 100644 index 00000000000..fe026074f4f --- /dev/null +++ b/addons/crm/test/test_crm_partner2opportunity.yml @@ -0,0 +1,25 @@ +- | + I start by creating a new opportunity from partner. +- + !record {model: crm.partner2opportunity, id: crm_partner2opportunity_id_0}: + name: test + planned_revenue: 0.0 + partner_id: base.res_partner_9 + probability: 0.0 +- + I click on "Create Opportunity" button of this wizard. +- + !python {model: crm.partner2opportunity}: | + fields = { + 'name': 'test', + 'planned_revenue': '0.0', + 'partner_id': ref('base.res_partner_9'), + 'probability': '0.0' + } + self.default_get(cr, uid, fields, {"active_ids": [ref("crm_partner2opportunity_id_0")]}) +- | + In order to check the opportunity is created or not, I check type. +- + !python {model: crm.partner2opportunity}: | + opportunity = self.make_opportunity(cr, uid, [ref("crm_partner2opportunity_id_0")], {"active_ids": [ref("crm_partner2opportunity_id_0")]}) + assert True diff --git a/addons/crm/test/test_crm_phonecall.yml b/addons/crm/test/test_crm_phonecall.yml index 1885e34a5ce..0754a5b9544 100644 --- a/addons/crm/test/test_crm_phonecall.yml +++ b/addons/crm/test/test_crm_phonecall.yml @@ -7,16 +7,19 @@ duration: 2.0 section_id: crm.section_sales_department - - Now , I select partner by click on "Create a Partner" button. + I select partner by click on "Create a Partner" button. - !record {model: crm.phonecall2partner, id: crm_phonecall2partner_1}: action: exist partner_id: base.res_partner_9 - - Now, click on "Continue" button of this wizard. + I click on "Continue" button of this wizard and make partner. - !python {model: crm.phonecall2partner}: | + + self._select_partner(cr, uid,{"active_ids": [ref("crm_phonecall_interviewcall0")]}) + self.open_create_partner(cr, uid, [ref("crm_phonecall2partner_1")], {"active_ids": [ref("crm_phonecall_interviewcall0")]}) self.make_partner(cr, uid, [ref("crm_phonecall2partner_1")], {"active_ids": [ref("crm_phonecall_interviewcall0")]}) - | @@ -28,31 +31,28 @@ partner_id: base.res_partner_9 planned_revenue: 0.0 probability: 0.0 -- - Now, I click on "Convert" button of this wizard. -- - !python {model: crm.phonecall2opportunity}: | - self.action_apply(cr, uid, [ref("crm_phonecall2opportunity_interviewcall0")], {"active_id": ref("crm_phonecall_interviewcall0")}) - - | I can see that a business opportunity is now assigned to this phonecall - !assert {model: crm.phonecall, id: crm_phonecall_interviewcall0}: - opportunity_id != False - +- + I click on "Convert" button of this wizard. +- + !python {model: crm.phonecall2opportunity}: | + self.action_apply(cr, uid, [ref("crm_phonecall2opportunity_interviewcall0")], {"active_id": ref("crm_phonecall_interviewcall0")}) - | And I check that the phonecall and the newly created business opportunity is linked - to same partner + to same partner. - !python {model: crm.phonecall}: | obj_phonecall = self.browse(cr, uid, ref('crm_phonecall_interviewcall0')) ids = self.pool.get('crm.lead').search(cr, uid, [('name', '=', obj_phonecall.opportunity_id.name)]) obj_opp = self.pool.get('crm.lead').browse(cr, uid, ids)[0] assert obj_phonecall.partner_id == obj_opp.partner_id - - | I schedule Meeting on this current phonecall by clicking on "schedule - Meeting" + Meeting". - !python {model: crm.phonecall}: | self.action_make_meeting(cr, uid, [ref('crm_phonecall_interviewcall0')]) @@ -60,7 +60,7 @@ - | I can see that Meeting's calendar view is shown. then I click on the date on which I want schedule meeting. - I fill proper data for that meeting and save it + I fill proper data for that meeting and save it. - !record {model: crm.meeting, id: crm_meeting_interviewcall0}: alarm_id: base_calendar.alarm3 @@ -85,9 +85,32 @@ name: Interview call section_id: crm.section_sales_department user_id: base.user_root + action: schedule + categ_id: crm.categ_phone1 +- + I click on "schedule other call" button. and plan for other call. +- + !record {model: crm.phonecall2phonecall, id: crm_phonecall2phonecall_interviewcall1}: + date: !eval "'%s-%s-%s 19:49:00' %(datetime.now().year,datetime.now().month,datetime.now().day)" + name: Interview call + section_id: crm.section_sales_department + user_id: base.user_root + action: log categ_id: crm.categ_phone1 - | I click on "Schedule" button of this wizard. - !python {model: crm.phonecall2phonecall}: | + fields = { + 'name': 'Interview call', + 'section_id': ref('crm.section_sales_department'), + 'user_id': ref('base.user_root'), + 'categ_id': ref('crm.categ_phone1') + } + self.default_get(cr, uid, fields,{'active_id': ref('crm_phonecall_interviewcall0')}) self.action_apply(cr, uid, [ref('crm_phonecall2phonecall_interviewcall0')], {'active_id': ref('crm_phonecall_interviewcall0')}) +- | + I click on "Schedule" button of this wizard with log option. +- + !python {model: crm.phonecall2phonecall}: | + self.action_apply(cr, uid, [ref('crm_phonecall2phonecall_interviewcall1')], {'active_id': ref('crm_phonecall_interviewcall0')}) diff --git a/addons/crm/test/test_crm_phonecall_case2.yml b/addons/crm/test/test_crm_phonecall_case2.yml new file mode 100644 index 00000000000..1b07121183c --- /dev/null +++ b/addons/crm/test/test_crm_phonecall_case2.yml @@ -0,0 +1,26 @@ +- | + I start by creating a new phonecall. +- + !record {model: crm.phonecall, id: crm_phonecall_dummycall}: + date: !eval time.strftime('%Y-%m-%d 08:00:00') + name: Dummy call + duration: 0.0 + section_id: crm.section_sales_department + partner_id: base.res_partner_agrolait + state: open +- + I change Contact Detail of the Partner. +- + !python {model: crm.phonecall}: | + self.onchange_partner_address_id(cr, uid,[ref("crm_phonecall_dummycall")], ref("base.res_partner_address_8invoice")) + +- + I setting Phone call to Held (Done). +- + !python {model: crm.phonecall}: | + self.case_close(cr, uid, [ref("crm_phonecall_dummycall")]) +- + I check that the hone call is in 'Held' state. +- + !assert {model: crm.phonecall, id: crm_phonecall_dummycall, string: Phone call Helded}: + - state == "done" diff --git a/addons/crm/test/test_crm_recurrent_meeting_case2.yml b/addons/crm/test/test_crm_recurrent_meeting_case2.yml index 585c6af73ae..b6afeb6906e 100644 --- a/addons/crm/test/test_crm_recurrent_meeting_case2.yml +++ b/addons/crm/test/test_crm_recurrent_meeting_case2.yml @@ -21,7 +21,7 @@ meeting_ids = self.search(cr, uid, [('id', 'in', [ref('crm_meeting_testmeeting0')]),('date','>=','2011-03-13'), ('date_deadline', '<=', '2011-05-13')], context={'virtual_id': True}) assert len(meeting_ids) == 5, 'Recurrent daily meetings are not created !' - - Now I create a weekly meeting till a particular end date. + I create a weekly meeting till a particular end date. - !record {model: crm.meeting, id: crm_meeting_reviewcodewithprogrammer0}: date: '2011-04-18 11:47:00' @@ -95,4 +95,3 @@ meeting_ids = self.search(cr, uid, [('recurrent_uid', '=', ref('crm_meeting_reviewcodewithprogrammer0')), ('recurrent_id','=','2011-04-25 12:47:00')], context) assert meeting_ids, 'Meeting is not edited !' - \ No newline at end of file diff --git a/addons/crm/test/test_crm_segmentation.yml b/addons/crm/test/test_crm_segmentation.yml new file mode 100644 index 00000000000..5563f1ce52f --- /dev/null +++ b/addons/crm/test/test_crm_segmentation.yml @@ -0,0 +1,38 @@ +- | + I will test segmentation which create specific partner categories criteria. +- + I create a new segmentation record. +- + !record {model: crm.segmentation, id: crm_segmentation_id_0}: + categ_id: base.res_partner_category_5 + exclusif: true + name: segment + som_interval: 0.0 + sales_purchase_active : True +- + I start the process. +- + !python {model: crm.segmentation}: | + self.process_start(cr, uid, [ref("crm_segmentation_id_0")],context) +- + I continue the segmentation process. +- + !python {model: crm.segmentation}: | + context.update({'start': True}) + self.process_continue(cr, uid, [ref("crm_segmentation_id_0")], context) +- + I create the segmentation line. +- + !record {model: crm.segmentation.line, id: crm_segmentation_line_id_0}: + expr_name: sale + expr_operator: '>' + expr_value: 1000.0 + name: Rule1 + operator: or + segmentation_id: crm_segmentation_id_0 + +- + I check the Segmentation line record. +- + !python {model: crm.segmentation.line}: | + self.test(cr, uid, [ref("crm_segmentation_line_id_0")],partner_id=0) diff --git a/addons/crm/test/test_crm_stage_changes.yml b/addons/crm/test/test_crm_stage_changes.yml index c9c25bec604..391a328bffe 100644 --- a/addons/crm/test/test_crm_stage_changes.yml +++ b/addons/crm/test/test_crm_stage_changes.yml @@ -1,10 +1,10 @@ - In order to test the changes on stage of a lead or an opportunity with OpenERP, I create some leads and test the stage changes. -- +- I want to change the probability to 0.0 when the opportunity is marked as lost. So I set its Change probability automatically true. -- +- !record {model: crm.case.stage, id: crm.stage_lead6}: name: Lost on_change: true @@ -12,9 +12,9 @@ section_ids: - crm.section_sales_department sequence: 0 -- +- I create a lead 'Test Lead1'. -- +- !record {model: crm.lead, id: crm_lead_openerppresentation0}: categ_id: crm.categ_oppor4 day_close: 0.0 @@ -29,7 +29,17 @@ !python {model: crm.lead}: | self.case_open(cr, uid, [ref('crm_lead_openerppresentation0')]) - - I find that this lead can be converted to opportunity. + I assigning stage. +- + !python {model: crm.lead}: | + self.onchange_stage_id(cr, uid, [ref('crm_lead_openerppresentation0')], [], context) +- + I assigning percent. +- + !python {model: crm.lead}: | + self.stage_find_percent(cr, uid, 10.0, []) +- + I find that this lead can be converted to opportunity. - !record {model: crm.lead2opportunity.partner, id: crm_lead2opportunity_partner0}: action: 'create' @@ -51,7 +61,7 @@ !python {model: crm.lead}: | self.case_mark_lost(cr, uid, [ref('crm_lead_openerppresentation0')]) - - Now I check whether the probability is set according to stage change or not. + I check whether the probability is set according to stage change or not. - !python {model: crm.lead}: | opportunity = self.browse(cr, uid, ref('crm_lead_openerppresentation0')) diff --git a/addons/crm_claim/test/test_crm_claim.yml b/addons/crm_claim/test/test_crm_claim.yml index a99831c0588..9ee130329a7 100644 --- a/addons/crm_claim/test/test_crm_claim.yml +++ b/addons/crm_claim/test/test_crm_claim.yml @@ -1,10 +1,10 @@ - | - Now I check claims which contain customer claim information about document - related problem, product related problem. + I check claims which contain customer claim information about document + related problem, product related problem. - | - I start by creating new claims for Damaged product as Value Claims with priority High and specify + I start by creating new claims for Damaged product as Value Claims with priority High and specify date of claim at which claim is created. -- +- !record {model: crm.claim, id: crm_claim_damagedproduct0}: categ_id: crm_claim.categ_claim2 date: !eval time.strftime('%Y-%m-%d %H:%M:%S') @@ -21,13 +21,24 @@ !assert {model: crm.claim, id: crm_claim_damagedproduct0}: - state == 'draft' - | - I can change that stage by next button right on it + I can change that stage by next button right on it. - !python {model: crm.claim}: | - self.stage_next(cr, uid, [ref('crm_claim_damagedproduct0')]) + self.stage_next(cr, uid, [ref('crm_claim_damagedproduct0')]) - | - I make this claim as Open + I make this claim as Open. - !python {model: crm.claim}: | - self.case_open(cr, uid, [ref('crm_claim_damagedproduct0')]) - + self.case_open(cr, uid, [ref('crm_claim_damagedproduct0')]) +- | + I am changing partner Assigned to the Claim. +- + !python {model: crm.claim}: | + self.onchange_partner_id(cr, uid, [ref('crm_claim_damagedproduct0')], []) + self.onchange_partner_id(cr, uid, [ref('crm_claim_damagedproduct0')], ref('base.res_partner_10')) +- | + I am changing partner Address to the Claim. +- + !python {model: crm.claim}: | + self.onchange_partner_address_id(cr, uid, [ref('crm_claim_damagedproduct0')], [], email = False) + diff --git a/addons/crm_fundraising/test/test_crm_fund.yml b/addons/crm_fundraising/test/test_crm_fund.yml index e310dfa4d47..ef81afeb563 100644 --- a/addons/crm_fundraising/test/test_crm_fund.yml +++ b/addons/crm_fundraising/test/test_crm_fund.yml @@ -1,11 +1,11 @@ - | - Now I start test Fund Raising which contain information about Donation or charity + I start test Fund Raising which contain information about Donation or charity given by user. - | - I start by creating new Funds entry for donation for books to poor school children + I start by creating new Funds entry for donation for books to poor school children with cost 500000.00 and category as "Learning And Education" - I make payment by Cheque so I make sure that the mode on fund is selected as cheque -- + I make payment by Cheque so I make sure that the mode on fund is selected as cheque. +- !record {model: crm.fundraising, id: crm_fundraising_donationforbookstopoorschoolchildren0}: categ_id: crm_fundraising.categ_fund2 email_from: info@balmerinc.be @@ -21,12 +21,25 @@ !assert {model: crm.fundraising, id: crm_fundraising_donationforbookstopoorschoolchildren0}: - state == 'draft' - | - Now I open Funds by click on "Open" button + I open Funds by click on "Open" button. - !python {model: crm.fundraising}: | - self.case_open(cr, uid, [ref('crm_fundraising_donationforbookstopoorschoolchildren0')]) -- | - I can close Funds by click on "Done" button. + self.case_open(cr, uid, [ref('crm_fundraising_donationforbookstopoorschoolchildren0')]) +- + I create the message regarding the all details of fundraising. - !python {model: crm.fundraising}: | - self.case_close(cr, uid, [ref('crm_fundraising_donationforbookstopoorschoolchildren0')]) + msg = { + 'subject': 'fundraising_email', + 'body_text': 'fundraising details', + 'from': 'Administrator ', + 'priority':'3', + } + context = None + self.message_new(cr, uid,msg,context) + +- | + After a request via email now I close this fundraising Request by clicking on "Done" button. +- + !python {model: crm.fundraising}: | + self.case_close(cr, uid, [ref('crm_fundraising_donationforbookstopoorschoolchildren0')]) diff --git a/addons/crm_helpdesk/test/test_crm_helpdesk.yml b/addons/crm_helpdesk/test/test_crm_helpdesk.yml index 4023fad8c63..eb0a25d2110 100644 --- a/addons/crm_helpdesk/test/test_crm_helpdesk.yml +++ b/addons/crm_helpdesk/test/test_crm_helpdesk.yml @@ -10,6 +10,17 @@ partner_address_id: base.res_partner_address_1 partner_id: base.res_partner_9 section_id: crm.section_sales_department +- + I create the message. +- + !python {model: crm.helpdesk}: | + msg = { + 'subject': 'test_email', + 'body_text': 'Testing', + 'from': 'Administrator ', + } + context = None + self.message_new(cr, uid,msg,context) - | I check that the Helpdesk request is in 'Draft' state. @@ -17,10 +28,27 @@ !assert {model: crm.helpdesk, id: crm_helpdesk_somefunctionalquestion0}: - state == 'draft' - | - In order to make this helpdesk request to be considered I make it "Open" + I make it "Open". - !python {model: crm.helpdesk}: | self.case_open(cr, uid, [ref('crm_helpdesk_somefunctionalquestion0')]) +- + Update the created message. +- + !python {model: crm.helpdesk}: | + vals = {} + msg = { + 'subject': 'test_email', + 'body_text': 'Testing', + 'from': 'Administrator ', + 'priority': 'done' + } + context = None + default_act = 'pending' + try: + self.message_update(cr, uid,[ref('crm_helpdesk_somefunctionalquestion0')], msg,context) + except: + pass - | After a proper communication for the request via email I make sure that the request is fulfilled and I close this HelpDesk Request by clicking on "Close" button. diff --git a/addons/crm_partner_assign/test/test_crm_partner_assign.yml b/addons/crm_partner_assign/test/test_crm_partner_assign.yml index 4d982daab20..b214f535275 100644 --- a/addons/crm_partner_assign/test/test_crm_partner_assign.yml +++ b/addons/crm_partner_assign/test/test_crm_partner_assign.yml @@ -30,6 +30,11 @@ - !record {model: res.partner, id: base.res_partner_desertic_hispafuentes}: grade_id: res_partner_grade_first0 +- + I change the User email id or partner if needed. +- + !python {model: res.partner}: | + self.geo_localize(cr, uid, [ref('base.res_partner_desertic_hispafuentes')], context) - I assgin a reply-to email address to Sales Team. - @@ -57,7 +62,44 @@ probability: 0.0 type: opportunity - - Now I click on Forward button. + I change the assigned partner. +- + !python {model: crm.lead}: | + self.onchange_assign_id(cr, uid, [ref('crm_lead_questionnaireonopenerp0')], ref('base.res_partner_desertic_hispafuentes'), context) + self.assign_partner(cr, uid, [ref('crm_lead_questionnaireonopenerp0')], context) +- + I change the User email id or partner if needed. +- + !python {model: crm.lead.forward.to.partner}: | + context.update({'history': 'latest', }) + user = ref('base.user_root') + self.on_change_email(cr, uid, [ref('crm_lead_questionnaireonopenerp0')], user) + self.on_change_partner(cr, uid, [ref('crm_lead_questionnaireonopenerp0')], ref('base.res_partner_desertic_hispafuentes')) +- + I change in history define. +- + !python {model: crm.lead.forward.to.partner}: | + context.update({'history': 'info', }) + self.on_change_history(cr, uid, [ref('crm_lead_questionnaireonopenerp0')], context.get('history'), context) +- + I check the case history. +- + !python {model: crm.lead.forward.to.partner}: | + context.update({'history': 'latest', }) + self._get_case_history(cr, uid, context.get('history'), ref('crm_lead_questionnaireonopenerp0'), context=context) + + context.update({'history': 'info', }) + self._get_case_history(cr, uid, context.get('history'), ref('crm_lead_questionnaireonopenerp0'), context=context) + + context.update({'history': 'whole', }) + self._get_case_history(cr, uid, context.get('history'), ref('crm_lead_questionnaireonopenerp0'), context=context) +- + I get lead details. +- + !python {model: crm.lead.forward.to.partner}: | + self.get_lead_details(cr, uid, ref('crm_lead_questionnaireonopenerp0'), context) +- + I click on Forward button. - !python {model: crm.lead.forward.to.partner}: | from tools import config @@ -65,10 +107,30 @@ 'subject': 'email', 'email_to': 'info@axelor.com', 'email_from': 'Administrator ', - 'reply_to': 'sales_openerp@openerp.com' + 'reply_to': 'sales_openerp@openerp.com', + 'history': 'latest', } ids = self.create(cr, uid, vals, context={'active_id': ref('crm_lead_questionnaireonopenerp0'), 'active_model': 'crm.lead'}) host = config.get('smtp_user', '127.0.0.1') assert config.get(host, True), 'SMTP not configured !' - self.action_forward(cr, uid, [ids], context={'active_id': ref('crm_lead_questionnaireonopenerp0'), 'active_model': 'crm.lead'}) - + try: + self.action_forward(cr, uid, [ids], context={'active_id': ref('crm_lead_questionnaireonopenerp0'), 'active_model': 'crm.lead'}) + except: + pass +- + I create the opportunity. +- + !record {model: crm.lead, id: crm_opportunity2}: + email_from: info@balmerinc.be + name: 'FUEL CO 829264 - 10002 units' + partner_address_id: base.res_partner_address_1 + partner_id: base.res_partner_9 + probability: 1.0 + stage_id: crm.stage_lead1 + categ_id: crm.categ_oppor2 + section_id: crm.section_sales_department +- | + I Update the data. +- + !python {model: crm.merge.opportunity}: | + self._update_data([ref('crm_opportunity2')], ref('crm_lead_questionnaireonopenerp0')) diff --git a/addons/crm_profiling/__openerp__.py b/addons/crm_profiling/__openerp__.py index c76278201b1..98d69aca7b5 100644 --- a/addons/crm_profiling/__openerp__.py +++ b/addons/crm_profiling/__openerp__.py @@ -41,6 +41,7 @@ It also has been merged with the earlier CRM & SRM segmentation tool because the 'init_xml': [], 'update_xml': ['security/ir.model.access.csv', 'crm_profiling_view.xml'], 'demo_xml': ['crm_profiling_demo.xml'], + 'test': ['test/test_crm_profiling.yml'], 'installable': True, 'active': False, 'certificate': '0033984979005', diff --git a/addons/crm_profiling/test/test_crm_profiling.yml b/addons/crm_profiling/test/test_crm_profiling.yml new file mode 100644 index 00000000000..2b70cac592b --- /dev/null +++ b/addons/crm_profiling/test/test_crm_profiling.yml @@ -0,0 +1,77 @@ +- | + I check segmentation which allows users to perform segmentation within partners. +- + I create a crm profiling question record. +- + !record {model: crm_profiling.question, id: crm_profiling_question_openerppartner0}: + answers_ids: + - name: 'no' + name: OpenERP partner? +- + I create a crm profiling answer record. +- + !record {model: crm_profiling.answer, id: crm_profiling_answer_openerppartner0}: + name: 'yes' + question_id: crm_profiling_question_openerppartner0 +- + I create Partner category Customers. +- + !record {model: res.partner.category, id: res_partner_category_customers0}: + name: Customers +- | + I'm creating new partner "John" with his email "info@mycustomer.com". +- + !record {model: res.partner, id: res_partner_john0}: + address: + - city: Bruxelles + country_id: base.be + street: Rue des Palais 51, bte 33 + type: default + zip: '1000' + email: 'info@mycustomer.com' + name: John + category_id: + - res_partner_category_customers0 + answers_ids: + - crm_profiling_answer_openerppartner0 + +- + Define the answers and category to partner. +- + !python {model: res.partner}: | + data ={'form': {'questionnaire_name': ref('res_partner_john0')}, 'ids': [ref('res_partner_john0')], 'report_type': 'pdf', 'model': 'res.partner', 'id': ref('res_partner_john0')} + self._questionnaire_compute(cr, uid, data, context) +- | + I start by creating new Questionnaire. +- + !record {model: crm_profiling.questionnaire, id: crm_profiling_questionnaire_basequestionnaire0}: + description: First questionnaire. + name: Base questionnaire + questions_ids: + - crm_profiling.activity_sector + - crm_profiling.nb_employees + - crm_profiling.partner_level +- | + I create the form for the "Base questionnaire". +- + !python {model: crm_profiling.questionnaire}: | + context.update({'active_id':ref('res_partner_john0')}) + data ={'form': {'questionnaire_name': ref('res_partner_john0')}, 'ids': [ref('res_partner_john0')], 'report_type': 'pdf', 'model': 'res.partner', 'id': ref('res_partner_john0')} + self.build_form(cr, uid, data, context) +- + I create a segmentation record. +- + !record {model: crm.segmentation, id: crm_segmentation_test1}: + answer_yes: + - crm_profiling_answer_openerppartner0 + categ_id: res_partner_category_customers0 + name: test + parent_id: crm_profiling.crm_segmentation0 + profiling_active: true + som_interval: 0.0 +- | + I continue the process of segmentation. +- + !python {model: crm.segmentation}: | + self.process_continue(cr, uid, [ref('crm_segmentation_test1')], start=False) +