Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Зуев Егор
/
wiki.dev
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
Authored by
Dan Brown
2016-01-02 14:48:35 +0000
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Commit
d3709de035bcb3fbf8440a79ac7a5df8331333a9
d3709de0
1 parent
f60a0c3b
Added more tests to increase test coverage
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
97 additions
and
33 deletions
app/Entity.php
app/Http/Controllers/SearchController.php
app/Http/Controllers/UserController.php
app/Role.php
database/seeds/DummyContentSeeder.php
phpunit.xml
resources/assets/js/controllers.js
resources/views/users/edit.blade.php
tests/AuthTest.php
tests/EntityTest.php
app/Entity.php
View file @
d3709de
...
...
@@ -31,11 +31,7 @@ abstract class Entity extends Model
if
(
$matches
)
return
true
;
if
(
$entity
->
isA
(
'chapter'
)
&&
$this
->
isA
(
'book'
))
{
return
$entity
->
book_id
===
$this
->
id
;
}
if
(
$entity
->
isA
(
'page'
)
&&
$this
->
isA
(
'book'
))
{
if
((
$entity
->
isA
(
'chapter'
)
||
$entity
->
isA
(
'page'
))
&&
$this
->
isA
(
'book'
))
{
return
$entity
->
book_id
===
$this
->
id
;
}
...
...
@@ -65,15 +61,6 @@ abstract class Entity extends Model
}
/**
* Get just the views for the current user.
* @return mixed
*/
public
function
userViews
()
{
return
$this
->
views
()
->
where
(
'user_id'
,
'='
,
auth
()
->
user
()
->
id
);
}
/**
* Allows checking of the exact class, Used to check entity type.
* Cleaner method for is_a.
* @param $type
...
...
app/Http/Controllers/SearchController.php
View file @
d3709de
...
...
@@ -62,9 +62,9 @@ class SearchController extends Controller
return
redirect
()
->
back
();
}
$searchTerm
=
$request
->
get
(
'term'
);
$
whereTerm
=
[[
'book_id'
,
'='
,
$bookId
]];
$pages
=
$this
->
pageRepo
->
getBySearch
(
$searchTerm
,
$
whereTerm
);
$chapters
=
$this
->
chapterRepo
->
getBySearch
(
$searchTerm
,
$
whereTerm
);
$
searchWhereTerms
=
[[
'book_id'
,
'='
,
$bookId
]];
$pages
=
$this
->
pageRepo
->
getBySearch
(
$searchTerm
,
$
searchWhereTerms
);
$chapters
=
$this
->
chapterRepo
->
getBySearch
(
$searchTerm
,
$
searchWhereTerms
);
return
view
(
'search/book'
,
[
'pages'
=>
$pages
,
'chapters'
=>
$chapters
,
'searchTerm'
=>
$searchTerm
]);
}
...
...
app/Http/Controllers/UserController.php
View file @
d3709de
...
...
@@ -116,9 +116,11 @@ class UserController extends Controller
$this
->
validate
(
$request
,
[
'name'
=>
'required'
,
'email'
=>
'required|email|unique:users,email,'
.
$id
,
'password'
=>
'min:5'
,
'password-confirm'
=>
'same:password'
,
'password'
=>
'min:5
|required_with:password_confirm
'
,
'password-confirm'
=>
'same:password
|required_with:password
'
,
'role'
=>
'exists:roles,id'
],
[
'password-confirm.required_with'
=>
'Password confirmation required'
]);
$user
=
$this
->
user
->
findOrFail
(
$id
);
...
...
@@ -132,6 +134,7 @@ class UserController extends Controller
$password
=
$request
->
get
(
'password'
);
$user
->
password
=
bcrypt
(
$password
);
}
$user
->
save
();
return
redirect
(
'/users'
);
}
...
...
app/Role.php
View file @
d3709de
...
...
@@ -43,6 +43,16 @@ class Role extends Model
*/
public
static
function
getDefault
()
{
return
static
::
where
(
'name'
,
'='
,
static
::
$default
)
->
first
();
return
static
::
getRole
(
static
::
$default
);
}
/**
* Get the role object for the specified role.
* @param $roleName
* @return mixed
*/
public
static
function
getRole
(
$roleName
)
{
return
static
::
where
(
'name'
,
'='
,
$roleName
)
->
first
();
}
}
...
...
database/seeds/DummyContentSeeder.php
View file @
d3709de
...
...
@@ -12,7 +12,7 @@ class DummyContentSeeder extends Seeder
public
function
run
()
{
$user
=
factory
(
BookStack\User
::
class
,
1
)
->
create
();
$role
=
\BookStack\Role
::
where
(
'name'
,
'='
,
'admin'
)
->
firs
t
();
$role
=
\BookStack\Role
::
getDefaul
t
();
$user
->
attachRole
(
$role
);
...
...
phpunit.xml
View file @
d3709de
...
...
@@ -26,6 +26,6 @@
<env
name=
"QUEUE_DRIVER"
value=
"sync"
/>
<env
name=
"DB_CONNECTION"
value=
"mysql_testing"
/>
<env
name=
"MAIL_PRETEND"
value=
"true"
/>
<env
name=
"DISABLE_EXTERNAL_SERVICES"
value=
"
tru
e"
/>
<env
name=
"DISABLE_EXTERNAL_SERVICES"
value=
"
fals
e"
/>
</php>
</phpunit>
...
...
resources/assets/js/controllers.js
View file @
d3709de
...
...
@@ -127,7 +127,7 @@ module.exports = function (ngApp) {
}]);
ngApp
.
controller
(
'BookShowController'
,
[
'$scope'
,
'$http'
,
'$attrs'
,
function
(
$scope
,
$http
,
$attrs
)
{
ngApp
.
controller
(
'BookShowController'
,
[
'$scope'
,
'$http'
,
'$attrs'
,
'$sce'
,
function
(
$scope
,
$http
,
$attrs
,
$sce
)
{
$scope
.
searching
=
false
;
$scope
.
searchTerm
=
''
;
$scope
.
searchResults
=
''
;
...
...
@@ -141,7 +141,7 @@ module.exports = function (ngApp) {
var
searchUrl
=
'/search/book/'
+
$attrs
.
bookId
;
searchUrl
+=
'?term='
+
encodeURIComponent
(
term
);
$http
.
get
(
searchUrl
).
then
((
response
)
=>
{
$scope
.
searchResults
=
response
.
data
;
$scope
.
searchResults
=
$sce
.
trustAsHtml
(
response
.
data
)
;
});
};
...
...
resources/views/users/edit.blade.php
View file @
d3709de
...
...
@@ -9,7 +9,7 @@
<div
class=
"col-md-6"
></div>
<div
class=
"col-md-6 faded"
>
<div
class=
"action-buttons"
>
<a
href=
"/users/{{$user->id}}/delete"
class=
"text-neg text-button"
><i
class=
"zmdi zmdi-delete"
></i>
Delete
u
ser
</a>
<a
href=
"/users/{{$user->id}}/delete"
class=
"text-neg text-button"
><i
class=
"zmdi zmdi-delete"
></i>
Delete
U
ser
</a>
</div>
</div>
</div>
...
...
tests/AuthTest.php
View file @
d3709de
...
...
@@ -102,10 +102,10 @@ class AuthTest extends TestCase
->
seeInDatabase
(
'users'
,
[
'name'
=>
$user
->
name
,
'email'
=>
$user
->
email
,
'email_confirmed'
=>
true
]);
}
public
function
testUserC
ontrol
()
public
function
testUserC
reation
()
{
$user
=
factory
(
\BookStack\User
::
class
)
->
make
();
// Test creation
$this
->
asAdmin
()
->
visit
(
'/users'
)
->
click
(
'Add new user'
)
...
...
@@ -118,9 +118,12 @@ class AuthTest extends TestCase
->
seeInDatabase
(
'users'
,
$user
->
toArray
())
->
seePageIs
(
'/users'
)
->
see
(
$user
->
name
);
$user
=
$user
->
where
(
'email'
,
'='
,
$user
->
email
)
->
first
();
}
// Test editing
public
function
testUserUpdating
()
{
$user
=
\BookStack\User
::
all
()
->
last
();
$password
=
$user
->
password
;
$this
->
asAdmin
()
->
visit
(
'/users'
)
->
click
(
$user
->
name
)
...
...
@@ -129,20 +132,58 @@ class AuthTest extends TestCase
->
type
(
'Barry Scott'
,
'#name'
)
->
press
(
'Save'
)
->
seePageIs
(
'/users'
)
->
seeInDatabase
(
'users'
,
[
'id'
=>
$user
->
id
,
'name'
=>
'Barry Scott'
])
->
seeInDatabase
(
'users'
,
[
'id'
=>
$user
->
id
,
'name'
=>
'Barry Scott'
,
'password'
=>
$password
])
->
notSeeInDatabase
(
'users'
,
[
'name'
=>
$user
->
name
]);
$user
=
$user
->
find
(
$user
->
id
);
}
public
function
testUserPasswordUpdate
()
{
$user
=
\BookStack\User
::
all
()
->
last
();
$userProfilePage
=
'/users/'
.
$user
->
id
;
$this
->
asAdmin
()
->
visit
(
$userProfilePage
)
->
type
(
'newpassword'
,
'#password'
)
->
press
(
'Save'
)
->
seePageIs
(
$userProfilePage
)
->
see
(
'Password confirmation required'
)
->
type
(
'newpassword'
,
'#password'
)
->
type
(
'newpassword'
,
'#password-confirm'
)
->
press
(
'Save'
)
->
seePageIs
(
'/users'
);
$userPassword
=
\BookStack\User
::
find
(
$user
->
id
)
->
password
;
$this
->
assertTrue
(
Hash
::
check
(
'newpassword'
,
$userPassword
));
}
public
function
testUserDeletion
()
{
$userDetails
=
factory
(
\BookStack\User
::
class
)
->
make
();
$user
=
$this
->
getNewUser
(
$userDetails
->
toArray
());
// Test Deletion
$this
->
asAdmin
()
->
visit
(
'/users/'
.
$user
->
id
)
->
click
(
'Delete
u
ser'
)
->
click
(
'Delete
U
ser'
)
->
see
(
$user
->
name
)
->
press
(
'Confirm'
)
->
seePageIs
(
'/users'
)
->
notSeeInDatabase
(
'users'
,
[
'name'
=>
$user
->
name
]);
}
public
function
testUserCannotBeDeletedIfLastAdmin
()
{
$adminRole
=
\BookStack\Role
::
getRole
(
'admin'
);
// Ensure we currently only have 1 admin user
$this
->
assertEquals
(
1
,
$adminRole
->
users
()
->
count
());
$user
=
$adminRole
->
users
->
first
();
$this
->
asAdmin
()
->
visit
(
'/users/'
.
$user
->
id
)
->
click
(
'Delete User'
)
->
press
(
'Confirm'
)
->
seePageIs
(
'/users/'
.
$user
->
id
)
->
see
(
'You cannot delete the only admin'
);
}
public
function
testLogout
()
{
$this
->
asAdmin
()
...
...
tests/EntityTest.php
View file @
d3709de
...
...
@@ -188,6 +188,29 @@ class EntityTest extends TestCase
->
seePageIs
(
'/'
);
}
public
function
testBookSearch
()
{
$book
=
\BookStack\Book
::
all
()
->
first
();
$page
=
$book
->
pages
->
last
();
$chapter
=
$book
->
chapters
->
last
();
$this
->
asAdmin
()
->
visit
(
'/search/book/'
.
$book
->
id
.
'?term='
.
urlencode
(
$page
->
name
))
->
see
(
$page
->
name
)
->
visit
(
'/search/book/'
.
$book
->
id
.
'?term='
.
urlencode
(
$chapter
->
name
))
->
see
(
$chapter
->
name
);
}
public
function
testEmptyBookSearchRedirectsBack
()
{
$book
=
\BookStack\Book
::
all
()
->
first
();
$this
->
asAdmin
()
->
visit
(
'/books'
)
->
visit
(
'/search/book/'
.
$book
->
id
.
'?term='
)
->
seePageIs
(
'/books'
);
}
public
function
testEntitiesViewableAfterCreatorDeletion
()
{
...
...
Please
register
or
sign in
to post a comment