Passed
Push — 1.0 ( e206d7...64fd78 )
by Morven
03:35
created

ContactHelperTest::testSyncContactAndMember()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 32
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 18
c 1
b 0
f 0
dl 0
loc 32
rs 9.6666
cc 1
nc 1
nop 0
1
<?php
2
3
namespace SilverCommerce\ContactAdmin\Tests;
4
5
use DateTime;
6
use ReflectionClass;
7
use SilverStripe\Security\Member;
8
use SilverStripe\Core\Environment;
9
use SilverStripe\Dev\SapphireTest;
10
use SilverCommerce\ContactAdmin\Model\Contact;
11
use SilverCommerce\ContactAdmin\Helpers\ContactHelper;
12
13
class ContactHelperTest extends SapphireTest
14
{
15
    protected static $fixture_file = 'ContactHelperTest.yml';
16
17
    protected function setUp()
18
    {
19
        // Disable auto sync so that data is created as per fixtures
20
        $curr = ContactHelper::config()->get('auto_sync');
21
        ContactHelper::config()->set('auto_sync', false);
22
23
        parent::setUp();
24
25
        ContactHelper::config()->set('auto_sync', $curr);
26
    }
27
28
    public function testFindOrMakeMember()
29
    {
30
        $contact_one = $this->objFromFixture(Contact::class, 'contact_one');
31
        $member_one = $this->objFromFixture(Member::class, 'member_one');
32
33
        $contact_two = $this->objFromFixture(Contact::class, 'contact_two');
34
        $member_two = $this->objFromFixture(Member::class, 'member_two');
35
36
        $contact_three = $this->objFromFixture(Contact::class, 'contact_three');
37
38
        $helper = ContactHelper::create();
39
        $helper->setContact($contact_one);
40
        $member = $helper->findOrMakeMember();
41
        $this->assertEquals($member_one->ID, $member->ID);
42
43
        $helper->setContact($contact_two);
44
        $member = $helper->findOrMakeMember();
45
        $this->assertEquals($member_two->ID, $member->ID);
46
47
        $helper->setContact($contact_three);
48
        $member = $helper->findOrMakeMember();
49
        $this->assertEquals($member->ID, $contact_three->MemberID);
50
    }
51
52
    public function testFindOrMakeContact()
53
    {
54
        $member_one = $this->objFromFixture(Member::class, 'member_one');
55
        $contact_one = $this->objFromFixture(Contact::class, 'contact_one');
56
57
        $member_two = $this->objFromFixture(Member::class, 'member_two');
58
        $contact_two = $this->objFromFixture(Contact::class, 'contact_two');
59
60
        $helper = ContactHelper::create();
61
        $helper->setMember($member_one);
62
63
        $contact = $helper->findOrMakeContact();
64
        $this->assertEquals($contact_one->ID, $contact->ID);
65
66
        $helper->setMember($member_two);
67
        $contact = $helper->findOrMakeContact();
68
        $this->assertEquals($contact_two->ID, $contact->ID);
69
70
        $member_four = $this->objFromFixture(Member::class, 'member_four');
71
        $id = $member_four->ID;
72
73
        $helper = ContactHelper::create();
74
        $helper->setMember($member_four);
75
        $contact = $helper->findOrMakeContact();
76
77
        // Re-get member from DB
78
        $member_four = Member::get()->byID($id);
79
        $this->assertEquals($contact->ID, $member_four->Contact()->ID);
80
        $this->assertEquals($contact->Email, $member_four->Email);
81
        $this->assertEquals($contact->FirstName, $member_four->FirstName);
82
        $this->assertEquals($contact->Surname, $member_four->Surname);
83
    }
84
85
    public function testSyncContactAndMember()
86
    {
87
        // Test syncing from contact to member
88
        $contact_one = $this->objFromFixture(Contact::class, 'contact_one');
89
        $member_one = $this->objFromFixture(Member::class, 'member_one');
90
91
        // Change name and last edited. Not ideal, but last edited is often the same as created
92
        // due to scrip execution time 
93
        $contact_one->FirstName = "Member Changed";
94
95
        $helper = ContactHelper::create()
96
            ->setContact($contact_one)
97
            ->setMember($member_one)
98
            ->syncContactAndMember(false);
99
        
100
        $member = $helper->getMember();
101
        
102
        $this->assertEquals("Member Changed", $member->FirstName);
103
104
        // Test syncing from member to contact
105
        $contact_two = $this->objFromFixture(Contact::class, 'contact_two');
106
        $member_two = $this->objFromFixture(Member::class, 'member_two');
107
        $member_two->FirstName = "Member Changed";
108
109
        $helper = ContactHelper::create()
110
            ->setContact($contact_two)
111
            ->setMember($member_two)
112
            ->syncContactAndMember(false);
113
        
114
        $contact = $helper->getContact();
115
116
        $this->assertEquals("Member Changed", $contact->FirstName);
117
    }
118
119
    public function testPushChangedFields()
120
    {
121
        $contact_one = $this->objFromFixture(Contact::class, 'contact_one');
122
        $member_one = $this->objFromFixture(Member::class, 'member_one');
123
        $helper = ContactHelper::create();
124
125
        $contact_one->FirstName = "Member Changed";
126
        $helper->pushChangedFields($contact_one, $member_one);
127
128
        $this->assertEquals("Member Changed", $member_one->FirstName);
129
130
        $contact_two = $this->objFromFixture(Contact::class, 'contact_two');
131
        $member_two = $this->objFromFixture(Member::class, 'member_two');
132
        $helper = ContactHelper::create();
133
134
        $contact_two->Surname = "Two Changed";
135
        $member_two->FirstName = "Member Changed";
136
        $helper->pushChangedFields($member_two, $contact_two);
137
138
        $this->assertEquals("Member Changed", $contact_two->FirstName);
139
        $this->assertEquals("Two Changed", $contact_two->Surname);
140
    }
141
142
    public function testPushFields()
143
    {
144
        $contact_one = $this->objFromFixture(Contact::class, 'contact_one');
145
        $member_one = $this->objFromFixture(Member::class, 'member_one');
146
        $helper = ContactHelper::create();
147
148
        $contact_one->FirstName = "Member Changed";
149
        $helper->pushFields($contact_one, $member_one);
150
151
        $this->assertEquals("Member Changed", $member_one->FirstName);
152
153
        $contact_two = $this->objFromFixture(Contact::class, 'contact_two');
154
        $member_two = $this->objFromFixture(Member::class, 'member_two');
155
        $helper = ContactHelper::create();
156
157
        $contact_two->Surname = "Two Changed";
158
        $member_two->FirstName = "Member Changed";
159
        $helper->pushFields($member_two, $contact_two);
160
161
        $this->assertEquals("Member Changed", $contact_two->FirstName);
162
        $this->assertEquals("Two", $contact_two->Surname);
163
    }
164
}
165