Skip to content

Commit ebd64d9

Browse files
committed
Test only sponsor owners can edit sponsor settings
Summary: Resolves T218 Test Plan: - make test Reviewers: doshitan Reviewed By: doshitan Maniphest Tasks: T218 Differential Revision: https://phabricator.opengovfoundation.org/D139
1 parent 030d687 commit ebd64d9

File tree

3 files changed

+135
-18
lines changed

3 files changed

+135
-18
lines changed

tests/Browser/Pages/Sponsor/CreatePage.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,15 @@ public function elements()
4040
];
4141
}
4242

43-
public function fillNewSponsorForm(Browser $browser, $attrs)
43+
public function fillNewSponsorForm(Browser $browser, $sponsorAttrs)
4444
{
45-
$browser->type('name', $attrs['name'])
46-
->type('display_name', $attrs['display_name'])
47-
->type('address1', $attrs['address1'])
48-
->type('city', $attrs['city'])
49-
->type('state', $attrs['state'])
50-
->type('postal_code', $attrs['postal_code'])
51-
->type('phone', $attrs['phone'])
45+
$browser->type('name', $sponsorAttrs->name)
46+
->type('display_name', $sponsorAttrs->display_name)
47+
->type('address1', $sponsorAttrs->address1)
48+
->type('city', $sponsorAttrs->city)
49+
->type('state', $sponsorAttrs->state)
50+
->type('postal_code', $sponsorAttrs->postal_code)
51+
->type('phone', $sponsorAttrs->phone)
5252
;
5353
}
5454
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
3+
namespace Tests\Browser\Pages\Sponsor;
4+
5+
use App\Models\Sponsor;
6+
use Laravel\Dusk\Browser;
7+
use Tests\Browser\Pages\Page;
8+
9+
class EditPage extends Page
10+
{
11+
public $sponsor;
12+
13+
public function __construct(Sponsor $sponsor)
14+
{
15+
$this->sponsor = $sponsor;
16+
}
17+
18+
/**
19+
* Get the URL for the page.
20+
*
21+
* @return string
22+
*/
23+
public function url()
24+
{
25+
return route('sponsors.edit', [$this->sponsor], false);
26+
}
27+
28+
/**
29+
* Assert that the browser is on the page.
30+
*
31+
* @return void
32+
*/
33+
public function assert(Browser $browser)
34+
{
35+
$browser->assertPathIs($this->url());
36+
}
37+
38+
/**
39+
* Get the element shortcuts for the page.
40+
*
41+
* @return array
42+
*/
43+
public function elements()
44+
{
45+
return [
46+
'@submitBtn' => '#content form button[type=submit]',
47+
];
48+
}
49+
50+
public function assertFormHasDataForSponsor(Browser $browser, Sponsor $sponsor)
51+
{
52+
$browser
53+
->assertInputValue('name', $sponsor->name)
54+
->assertInputValue('display_name', $sponsor->display_name)
55+
->assertInputValue('address1', $sponsor->address1)
56+
->assertInputValue('city', $sponsor->city)
57+
->assertInputValue('state', $sponsor->state)
58+
->assertInputValue('postal_code', $sponsor->postal_code)
59+
->assertInputValue('phone', $sponsor->phone)
60+
;
61+
}
62+
}

tests/Browser/SponsorTest.php

Lines changed: 65 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,14 @@ public function testUserCanCreateSponsor()
2828
// TODO: currently doesn't work with Dusk
2929
//Event::fake();
3030

31-
$attrs = factory(Sponsor::class)->make()->toArray();
31+
$sponsorAttrs = factory(Sponsor::class)->make();
3232
$user = factory(User::class)->create();
3333

34-
$this->browse(function ($browser) use ($attrs, $user) {
34+
$this->browse(function ($browser) use ($sponsorAttrs, $user) {
3535
$browser
3636
->loginAs($user)
3737
->visit(new SponsorPages\CreatePage)
38-
->fillNewSponsorForm($attrs)
38+
->fillNewSponsorForm($sponsorAttrs)
3939
->click('@submitBtn')
4040
->assertVisible('.alert.alert-info') // some success
4141
;
@@ -46,13 +46,13 @@ public function testUserCanCreateSponsor()
4646

4747
$this->assertEquals($sponsor->status, Sponsor::STATUS_PENDING);
4848

49-
$this->assertEquals($sponsor->name, $attrs['name']);
50-
$this->assertEquals($sponsor->display_name, $attrs['display_name']);
51-
$this->assertEquals($sponsor->address1, $attrs['address1']);
52-
$this->assertEquals($sponsor->city, $attrs['city']);
53-
$this->assertEquals($sponsor->state, $attrs['state']);
54-
$this->assertEquals($sponsor->postal_code, $attrs['postal_code']);
55-
$this->assertEquals($sponsor->phone, $attrs['phone']);
49+
$this->assertEquals($sponsor->name, $sponsorAttrs->name);
50+
$this->assertEquals($sponsor->display_name, $sponsorAttrs->display_name);
51+
$this->assertEquals($sponsor->address1, $sponsorAttrs->address1);
52+
$this->assertEquals($sponsor->city, $sponsorAttrs->city);
53+
$this->assertEquals($sponsor->state, $sponsorAttrs->state);
54+
$this->assertEquals($sponsor->postal_code, $sponsorAttrs->postal_code);
55+
$this->assertEquals($sponsor->phone, $sponsorAttrs->phone);
5656

5757
// TODO: currently doesn't work with Dusk
5858
//Event::assertDispatched('App\Events\SponsorCreated', function ($e) use ($sponsor) {
@@ -104,4 +104,59 @@ public function testShowRedirectsToDocumentList()
104104
;
105105
});
106106
}
107+
108+
public function testSponsorOwnerCanEditSponsorSettings()
109+
{
110+
$user = factory(User::class)->create();
111+
$sponsor = FactoryHelpers::createActiveSponsorWithUser($user);
112+
113+
$newSponsorData = factory(Sponsor::class)->make();
114+
115+
$this->browse(function ($browser) use ($user, $sponsor, $newSponsorData) {
116+
$browser
117+
->loginAs($user)
118+
->visit(new SponsorPages\EditPage($sponsor))
119+
->assertFormHasDataForSponsor($sponsor)
120+
->type('name', $newSponsorData->name)
121+
->type('display_name', $newSponsorData->display_name)
122+
->type('address1', $newSponsorData->address1)
123+
->type('city', $newSponsorData->city)
124+
->type('state', $newSponsorData->state)
125+
->type('postal_code', $newSponsorData->postal_code)
126+
->type('phone', $newSponsorData->phone)
127+
->press('@submitBtn')
128+
->assertRouteIs('sponsors.edit', $sponsor)
129+
->assertFormHasDataForSponsor($sponsor->fresh())
130+
;
131+
132+
$sponsor = $sponsor->fresh();
133+
134+
$this->assertEquals($sponsor->name, $newSponsorData->name);
135+
$this->assertEquals($sponsor->display_name, $newSponsorData->display_name);
136+
$this->assertEquals($sponsor->address1, $newSponsorData->address1);
137+
$this->assertEquals($sponsor->city, $newSponsorData->city);
138+
$this->assertEquals($sponsor->state, $newSponsorData->state);
139+
$this->assertEquals($sponsor->postal_code, $newSponsorData->postal_code);
140+
$this->assertEquals($sponsor->phone, $newSponsorData->phone);
141+
});
142+
}
143+
144+
public function testNonOwnerCantEditSponsorSettings()
145+
{
146+
$owner = factory(User::class)->create();
147+
$editor = factory(User::class)->create();
148+
149+
$sponsor = FactoryHelpers::createActiveSponsorWithUser($owner);
150+
$sponsor->addMember($editor->id, Sponsor::ROLE_EDITOR);
151+
152+
$this->browse(function ($browser) use ($editor, $sponsor) {
153+
$browser
154+
->loginAs($editor)
155+
->visitRoute('sponsors.documents.index', $sponsor)
156+
->assertDontSeeIn('#content .list-group', trans('messages.settings'))
157+
->visitRoute('sponsors.edit', $sponsor)
158+
->assertSee('unauthorized')
159+
;
160+
});
161+
}
107162
}

0 commit comments

Comments
 (0)