From 385f7a4920e67b8c79c603f41bd10e411ebac03f Mon Sep 17 00:00:00 2001 From: dpradeep Date: Wed, 12 Jun 2013 13:01:55 +0530 Subject: [PATCH] -- fixed for CRM-10146, Restricted the creation of same membership and activity again. --- CRM/Contact/BAO/Contact/Utils.php | 4 +- .../Member/InheritedMembershipTest.php | 286 ++++++++++++++++++ 2 files changed, 288 insertions(+), 2 deletions(-) diff --git a/CRM/Contact/BAO/Contact/Utils.php b/CRM/Contact/BAO/Contact/Utils.php index b36f571b6c..9b6148896e 100644 --- a/CRM/Contact/BAO/Contact/Utils.php +++ b/CRM/Contact/BAO/Contact/Utils.php @@ -296,7 +296,8 @@ UNION } } - if ($organizationId) { + $previousEmployerID = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $contactID, 'employer_id'); + if ($organizationId && $organizationId != $previousEmployerID) { $cid = array('contact' => $contactID); // get the relationship type id of "Employee of" @@ -317,7 +318,6 @@ UNION // In case we change employer, clean prveovious employer related records. - $previousEmployerID = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $contactID, 'employer_id'); if ($previousEmployerID && $previousEmployerID != $organizationId ) { diff --git a/tests/phpunit/WebTest/Member/InheritedMembershipTest.php b/tests/phpunit/WebTest/Member/InheritedMembershipTest.php index eb04eda595..06b5f5c2b0 100644 --- a/tests/phpunit/WebTest/Member/InheritedMembershipTest.php +++ b/tests/phpunit/WebTest/Member/InheritedMembershipTest.php @@ -263,5 +263,291 @@ class WebTest_Member_InheritedMembershipTest extends CiviSeleniumTestCase { $this->click('css=li#tab_member a'); $this->waitForElementPresent('css=div#memberships'); } + + /* + * Webtest for CRM-10146 + * + */ + function testInheritedMembershipActivity() { + // Log in using webtestLogin() method + $this->webtestLogin(); + + $this->openCiviPage('contact/add', 'reset=1&ct=Organization', '_qf_Contact_cancel'); + + $title = substr(sha1(rand()), 0, 7); + $this->type('organization_name', "Organization $title"); + $this->type('email_1_email', "$title@org.com"); + $this->clickLink('_qf_Contact_upload_view'); + $this->waitForText('crm-notification-container', "Organization {$title} has been created."); + + $this->openCiviPage('admin/member/membershipType', 'reset=1&action=browse'); + + $this->click('link=Add Membership Type'); + $this->waitForElementPresent('_qf_MembershipType_cancel-bottom'); + + $this->type('name', "Membership Type $title"); + + $this->type('member_of_contact', $title); + $this->click('member_of_contact'); + $this->waitForElementPresent("css=div.ac_results-inner li"); + $this->click("css=div.ac_results-inner li"); + + $this->type('minimum_fee', '100'); + $this->select('financial_type_id', 'label=Member Dues'); + $this->type('duration_interval', 1); + $this->select('duration_unit', 'label=year'); + + $this->select('period_type', 'label=rolling'); + + $this->removeSelection('relationship_type_id', 'label=- select -'); + $this->addSelection('relationship_type_id', 'label=Employer of'); + + $this->type('max_related', '5'); + + $this->click('_qf_MembershipType_upload-bottom'); + $this->waitForElementPresent('link=Add Membership Type'); + $this->waitForText('crm-notification-container', "Membership Type $title"); + + // creating another Orgnization + $this->openCiviPage('contact/add', 'reset=1&ct=Organization', '_qf_Contact_cancel'); + $org1 = substr(sha1(rand()), 0, 7); + $this->type('organization_name', "Organization $org1"); + $this->type('email_1_email', "$org1@org.com"); + $this->clickLink('_qf_Contact_upload_view'); + + // click through to the membership view screen + $this->click('css=li#tab_member a'); + + $this->waitForElementPresent('link=Add Membership'); + $this->click('link=Add Membership'); + + $this->waitForElementPresent('_qf_Membership_cancel-bottom'); + + // fill in Membership Organization and Type + $this->select('membership_type_id[0]', "label=Organization $title"); + $this->select('membership_type_id[1]', "label=Membership Type $title"); + + $sourceText = 'Membership ContactAddTest with Rolling Membership Type'; + // fill in Source + $this->type('source', $sourceText); + + // Clicking save. + $this->clickLink('_qf_Membership_upload'); + + // page was loaded + $this->waitForTextPresent($sourceText); + + // Is status message correct? + $this->waitForText('crm-notification-container', "Membership Type $title"); + + // Adding contact + $this->openCiviPage('contact/add', 'reset=1&ct=Individual', '_qf_Contact_cancel-bottom'); + $firstName = substr(sha1(rand()), 0, 7); + $lastName = 'Anderson'; + $email = "$firstName@anderson.name"; + $this->type("first_name", $firstName); + $this->type("last_name", $lastName); + + // Set Current Employer + $this->type('current_employer', $org1); + $this->click('current_employer'); + $this->waitForElementPresent("css=div.ac_results-inner li"); + $this->click("css=div.ac_results-inner li"); + $this->assertContains($org1, $this->getValue('current_employer'), "autocomplete expected $org1 but didn’t find it in " . $this->getValue('current_employer')); + + $this->type("email_1_email", $email); + $this->clickLink("_qf_Contact_upload_view-bottom"); + $cid = $this->urlArg('cid'); + + // click through to the membership view screen + $this->click('css=li#tab_member a'); + $this->waitForElementPresent("xpath=//div[@id='memberships']//table//tbody/tr[1]/td[9]/span/a[text()='View']"); + + // check number of membership for contact + $this->assertEquals(1, $this->getText("xpath=//li[@id='tab_member']/a/em")); + + $this->clickLink("xpath=//div[@id='memberships']//table//tbody/tr[1]/td[9]/span/a[text()='View']"); + $expectedMembershipId = $this->urlArg('id'); + $this->clickLink("_qf_MembershipView_cancel-bottom"); + + // click through to the activity view screen + $this->click('css=li#tab_activity a'); + $this->waitForElementPresent("xpath=//table[@id='contact-activity-selector-activity']/tbody//tr/td[8]/span/a[text()='View']"); + + // check number of activity for contact + $this->assertEquals(1, $this->getText("xpath=//li[@id='tab_activity']/a/em")); + + $this->clickLink("xpath=//table[@id='contact-activity-selector-activity']/tbody//tr/td[8]/span/a[text()='View']"); + $expectedMembershipActivityId = $this->urlArg('id'); + $this->clickLink("_qf_MembershipView_cancel-bottom"); + + // verify membership id with membership activity id + $this->assertEquals($expectedMembershipId, $expectedMembershipActivityId); + + // click through to the relationship view screen + $this->click('css=li#tab_rel a'); + $this->waitForElementPresent("xpath=//div[@id='option11_wrapper']/table/tbody/tr/td[2]/a"); + $this->assertTrue($this->isElementPresent("xpath=//div[@id='option11_wrapper']/table/tbody/tr/td[2]/a[text()='Organization $org1']")); + $this->assertEquals(1, $this->getText("xpath=//li[@id='tab_rel']/a/em")); + + // Edit Contact but do not change any field + $this->clickLink("css=a.edit.button"); + $this->waitForElementPresent('_qf_Contact_cancel-bottom'); + $this->clickLink("_qf_Contact_upload_view-top"); + + // click through to the membership view screen after edit + $this->click('css=li#tab_member a'); + $this->waitForElementPresent("xpath=//div[@id='memberships']//table//tbody/tr[1]/td[9]/span/a[text()='View']"); + $this->assertEquals(1, $this->getText("xpath=//li[@id='tab_member']/a/em")); + $this->clickLink("xpath=//div[@id='memberships']//table//tbody/tr[1]/td[9]/span/a[text()='View']"); + $actualMembershipId1 = $this->urlArg('id'); + $this->clickLink("_qf_MembershipView_cancel-bottom"); + + // click through to the activity view screen after edit + $this->click('css=li#tab_activity a'); + $this->waitForElementPresent("xpath=//table[@id='contact-activity-selector-activity']/tbody//tr/td[8]/span/a[text()='View']"); + $this->assertEquals(1, $this->getText("xpath=//li[@id='tab_activity']/a/em")); + $this->clickLink("xpath=//table[@id='contact-activity-selector-activity']/tbody//tr/td[8]/span/a[text()='View']"); + $actualMembershipActivityId1 = $this->urlArg('id'); + $this->clickLink("_qf_MembershipView_cancel-bottom"); + + // verify membership id and membership activity id with previous one + $this->assertEquals($expectedMembershipId, $actualMembershipId1); + $this->assertEquals($expectedMembershipId, $actualMembershipActivityId1); + + // click through to the relationship view screen after edit + $this->click('css=li#tab_rel a'); + $this->waitForElementPresent("xpath=//div[@id='option11_wrapper']/table/tbody/tr/td[2]/a"); + $this->assertTrue($this->isElementPresent("xpath=//div[@id='option11_wrapper']/table/tbody/tr/td[2]/a[text()='Organization $org1']")); + $this->assertEquals(1, $this->getText("xpath=//li[@id='tab_rel']/a/em")); + + // change the current employer of the contact + // creating another membership type + $this->openCiviPage('admin/member/membershipType', 'reset=1&action=browse'); + + $this->click('link=Add Membership Type'); + $this->waitForElementPresent('_qf_MembershipType_cancel-bottom'); + + $this->type('name', "Membership Type Another $title"); + + $this->type('member_of_contact', $title); + $this->click('member_of_contact'); + $this->waitForElementPresent("css=div.ac_results-inner li"); + $this->click("css=div.ac_results-inner li"); + + $this->type('minimum_fee', '100'); + $this->select('financial_type_id', 'label=Member Dues'); + $this->type('duration_interval', 1); + $this->select('duration_unit', 'label=year'); + + $this->select('period_type', 'label=rolling'); + + $this->removeSelection('relationship_type_id', 'label=- select -'); + $this->addSelection('relationship_type_id', 'label=Employer of'); + + $this->type('max_related', '5'); + + $this->click('_qf_MembershipType_upload-bottom'); + $this->waitForElementPresent('link=Add Membership Type'); + $this->waitForText('crm-notification-container', "Membership Type Another $title"); + + // creating another Orgnization + $this->openCiviPage('contact/add', 'reset=1&ct=Organization', '_qf_Contact_cancel'); + $org2 = substr(sha1(rand()), 0, 7); + $this->type('organization_name', "Organization $org2"); + $this->type('email_1_email', "$org2@org.com"); + $this->clickLink('_qf_Contact_upload_view'); + + // click through to the membership view screen + $this->click('css=li#tab_member a'); + $this->waitForElementPresent('link=Add Membership'); + $this->click('link=Add Membership'); + $this->waitForElementPresent('_qf_Membership_cancel-bottom'); + + // fill in Membership Organization and Type + $this->select('membership_type_id[0]', "label=Organization $title"); + $this->select('membership_type_id[1]', "label=Membership Type Another $title"); + + $sourceText = 'Membership ContactAddTest with Rolling Membership Type'; + $this->type('source', $sourceText); + $this->clickLink('_qf_Membership_upload'); + $this->waitForTextPresent($sourceText); + + // Is status message correct? + $this->waitForText('crm-notification-container', "Membership Type Another $title"); + + // edit contact + $this->openCiviPage("contact/add", "reset=1&action=update&cid=$cid", "_qf_Contact_cancel-bottom"); + + // change Current Employer + $this->type('current_employer', ''); + $this->click('current_employer'); + $this->type('current_employer', $org2); + $this->click('current_employer'); + $this->waitForElementPresent("css=div.ac_results-inner li"); + $this->click("css=div.ac_results-inner li"); + $this->clickLink("_qf_Contact_upload_view-bottom"); + + // click through to the membership view screen + $this->click('css=li#tab_member a'); + $this->waitForElementPresent("xpath=//div[@id='memberships']//table//tbody/tr[1]/td[9]/span/a[text()='View']"); + $this->assertEquals(1, $this->getText("xpath=//li[@id='tab_member']/a/em")); + $this->clickLink("xpath=//div[@id='memberships']//table//tbody/tr[1]/td[9]/span/a[text()='View']"); + $actualMembershipId2 = $this->urlArg('id'); + $this->clickLink("_qf_MembershipView_cancel-bottom"); + + // click through to the activity view screen + $this->click('css=li#tab_activity a'); + $this->waitForElementPresent("xpath=//table[@id='contact-activity-selector-activity']/tbody//tr/td[8]/span/a[text()='View']"); + $this->assertEquals(1, $this->getText("xpath=//li[@id='tab_activity']/a/em")); + $this->clickLink("xpath=//table[@id='contact-activity-selector-activity']/tbody//tr/td[8]/span/a[text()='View']"); + $actualMembershipActivityId2 = $this->urlArg('id'); + $this->clickLink("_qf_MembershipView_cancel-bottom"); + + // verify membership id and membership activity id with previous one + $this->assertNotEquals($expectedMembershipId, $actualMembershipId2); + $this->assertNotEquals($expectedMembershipId, $actualMembershipActivityId2); + + // click through to the relationship view screen + $this->click('css=li#tab_rel a'); + $this->waitForElementPresent("xpath=//div[@id='option11_wrapper']/table/tbody/tr/td[2]/a"); + $this->assertTrue($this->isElementPresent("xpath=//div[@id='option11_wrapper']/table/tbody/tr/td[2]/a[text()='Organization $org2']")); + $this->assertEquals(1, $this->getText("xpath=//li[@id='tab_rel']/a/em")); + + // creating another Orgnization with no membership + $this->openCiviPage('contact/add', 'reset=1&ct=Organization', '_qf_Contact_cancel'); + $org3 = substr(sha1(rand()), 0, 7); + $this->type('organization_name', "Organization $org3"); + $this->type('email_1_email', "$org3@org.com"); + $this->clickLink('_qf_Contact_upload_view'); + + // edit contact + $this->openCiviPage("contact/add", "reset=1&action=update&cid=$cid", "_qf_Contact_cancel-bottom"); + + // change Current Employer + $this->type('current_employer', ''); + $this->click('current_employer'); + $this->type('current_employer', $org3); + $this->click('current_employer'); + $this->waitForElementPresent("css=div.ac_results-inner li"); + $this->click("css=div.ac_results-inner li"); + $this->clickLink("_qf_Contact_upload_view-bottom"); + + // click through to the membership view screen + $this->click('css=li#tab_member a'); + $this->waitForText("xpath=//div[@id='Memberships']/div/div/div[3]", "No memberships have been recorded for this contact."); + $this->assertEquals(0, $this->getText("xpath=//li[@id='tab_member']/a/em")); + + // click through to the activity view screen + $this->click('css=li#tab_activity a'); + $this->waitForText("xpath=//table[@id='contact-activity-selector-activity']/tbody/tr/td", "No matches found."); + $this->assertEquals(0, $this->getText("xpath=//li[@id='tab_activity']/a/em")); + + // click through to the relationship view screen + $this->click('css=li#tab_rel a'); + $this->waitForElementPresent("xpath=//div[@id='option11_wrapper']/table/tbody/tr/td[2]/a"); + $this->assertTrue($this->isElementPresent("xpath=//div[@id='option11_wrapper']/table/tbody/tr/td[2]/a[text()='Organization $org3']")); + $this->assertEquals(1, $this->getText("xpath=//li[@id='tab_rel']/a/em")); + } } -- 2.25.1