Passed
Push — master ( 281bd1...9a9d98 )
by Robbie
53:25 queued 45:01
created

MemberCsvBulkLoaderTest::setUp()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 7
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace SilverStripe\Security\Tests;
4
5
use SilverStripe\ORM\DataObject;
6
use SilverStripe\Security\Group;
7
use SilverStripe\Security\MemberCsvBulkLoader;
8
use SilverStripe\Security\Member;
9
use SilverStripe\Security\PasswordValidator;
10
use SilverStripe\Security\Security;
11
use SilverStripe\Dev\SapphireTest;
12
13
class MemberCsvBulkLoaderTest extends SapphireTest
14
{
15
    protected static $fixture_file = 'MemberCsvBulkLoaderTest.yml';
16
17
    protected function setUp()
18
    {
19
        parent::setUp();
20
21
        PasswordValidator::singleton()
22
            ->setMinLength(0)
23
            ->setTestNames([]);
24
    }
25
26
    public function testNewImport()
27
    {
28
        $loader = new MemberCsvBulkLoader();
29
        $results = $loader->load(__DIR__ . '/MemberCsvBulkLoaderTest/MemberCsvBulkLoaderTest.csv');
30
        $created = $results->Created()->toArray();
31
        $this->assertEquals(count($created), 2);
32
        $this->assertEquals($created[0]->Email, '[email protected]');
33
        $this->assertEquals($created[1]->Email, '[email protected]');
34
    }
35
36
    public function testOverwriteExistingImport()
37
    {
38
        $author1 = new Member();
39
        $author1->FirstName = 'author1_first_old';
40
        $author1->Email = '[email protected]';
41
        $author1->write();
42
43
        $loader = new MemberCsvBulkLoader();
44
        $results = $loader->load(__DIR__ . '/MemberCsvBulkLoaderTest/MemberCsvBulkLoaderTest.csv');
45
        $created = $results->Created()->toArray();
46
        $this->assertEquals(count($created), 1);
47
        $updated = $results->Updated()->toArray();
48
        $this->assertEquals(count($updated), 1);
49
        $this->assertEquals($created[0]->Email, '[email protected]');
50
        $this->assertEquals($updated[0]->Email, '[email protected]');
51
        $this->assertEquals($updated[0]->FirstName, 'author1_first');
52
    }
53
54
    public function testAddToPredefinedGroups()
55
    {
56
        $existinggroup = $this->objFromFixture(Group::class, 'existinggroup');
57
58
        $loader = new MemberCsvBulkLoader();
59
        $loader->setGroups(array($existinggroup));
60
61
        $results = $loader->load(__DIR__ . '/MemberCsvBulkLoaderTest/MemberCsvBulkLoaderTest.csv');
62
63
        $created = $results->Created()->toArray();
64
        $this->assertEquals(1, count($created[0]->Groups()->column('ID')));
65
        $this->assertContains($existinggroup->ID, $created[0]->Groups()->column('ID'));
66
67
        $this->assertEquals(1, count($created[1]->Groups()->column('ID')));
68
        $this->assertContains($existinggroup->ID, $created[1]->Groups()->column('ID'));
69
    }
70
71
    public function testAddToCsvColumnGroupsByCode()
72
    {
73
        $existinggroup = $this->objFromFixture(Group::class, 'existinggroup');
74
75
        $loader = new MemberCsvBulkLoader();
76
        $results = $loader->load(__DIR__ . '/MemberCsvBulkLoaderTest/MemberCsvBulkLoaderTest_withGroups.csv');
77
78
        $newgroup = DataObject::get_one(
79
            Group::class,
80
            array(
81
            '"Group"."Code"' => 'newgroup'
82
            )
83
        );
84
        $this->assertEquals($newgroup->Title, 'newgroup');
85
86
        $created = $results->Created()->toArray();
87
        $this->assertEquals(1, count($created[0]->Groups()->column('ID')));
88
        $this->assertContains($existinggroup->ID, $created[0]->Groups()->column('ID'));
89
90
        $this->assertEquals(2, count($created[1]->Groups()->column('ID')));
91
        $this->assertContains($existinggroup->ID, $created[1]->Groups()->column('ID'));
92
        $this->assertContains($newgroup->ID, $created[1]->Groups()->column('ID'));
93
    }
94
95
    public function testCleartextPasswordsAreHashedWithDefaultAlgo()
96
    {
97
        $loader = new MemberCsvBulkLoader();
98
99
        $results = $loader->load(__DIR__ . '/MemberCsvBulkLoaderTest/MemberCsvBulkLoaderTest_cleartextpws.csv');
100
101
        $member = $results->Created()->First();
102
        $memberID = $member->ID;
103
        DataObject::flush_and_destroy_cache();
104
        $member = DataObject::get_by_id(Member::class, $memberID);
105
106
        // TODO Direct getter doesn't work, wtf!
107
        $this->assertEquals(Security::config()->password_encryption_algorithm, $member->getField('PasswordEncryption'));
0 ignored issues
show
Bug Best Practice introduced by
The property password_encryption_algorithm does not exist on SilverStripe\Core\Config\Config_ForClass. Since you implemented __get, consider adding a @property annotation.
Loading history...
108
        $result = $member->checkPassword('mypassword');
0 ignored issues
show
Bug introduced by
The method checkPassword() does not exist on SilverStripe\ORM\DataObject. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

108
        /** @scrutinizer ignore-call */ 
109
        $result = $member->checkPassword('mypassword');
Loading history...
109
        $this->assertTrue($result->isValid());
110
    }
111
}
112