Write exhaustive tests around project policy
In https://gitlab.com/gitlab-org/gitlab-ee/issues/12787#note_193244051 we noticed that making some changes to the `ProjectPolicy` didn't cause failures in `project_policy_spec.rb`.
We would need to ensure that the following tests are explicitly added to `project_policy_spec.rb`.
## When project access level is PRIVATE
```ruby
> p = Project.first
> p.public_builds
=> true
# project has PRIVATE access level (10) for all features
> p.project_feature
=> #<ProjectFeature:0x00007fa1cd564728
id: 1,
project_id: 1,
merge_requests_access_level: 10,
issues_access_level: 10,
wiki_access_level: 10,
snippets_access_level: 10,
builds_access_level: 10,
created_at: Thu, 06 Jun 2019 14:09:11 UTC +00:00,
updated_at: Tue, 16 Jul 2019 14:32:51 UTC +00:00,
repository_access_level: 10,
pages_access_level: 10>
# unauthenticated user
> ProjectPolicy.new(nil, p).allowed?(:read_build)
=> false
# user logged in but no access to the project
> ProjectPolicy.new(u, p).allowed?(:read_build)
=> false
# guest user
> guest = User.last
> p.add_guest(guest)
> ProjectPolicy.new(guest, p).allowed?(:read_build)
=> true
```
Unless we add a user as `guest` we don't allow `:read_build` even if `public_builds = true`.
## When project access level is INTERNAL
```ruby
> p.project_feature.update!(merge_requests_access_level: 20, issues_access_level: 20, wiki_access_level: 20, snippets_access_level: 20, builds_access_level: 20, repository_access_level: 20)
# allows guest users
> ProjectPolicy.new(guest, p).allowed?(:read_build)
=> true
# prevents unauthenticated users
> ProjectPolicy.new(nil, p).allowed?(:read_build)
=> false
```
## When project access level is PUBLIC
```ruby
> p.visibility_level = Project::PUBLIC
=> 20
> p.save!
=> true
> p.project_feature.update!(merge_requests_access_level: 20, builds_access_level: 20, repository_access_level: 20)
# unauthenticated user is allowed
> ProjectPolicy.new(nil, p).allowed?(:read_build)
=> true
# any user logged in
> ProjectPolicy.new(u, p).allowed?(:read_build)
=> true
```
These seem to match exactly the expectations when `public builds` are enabled. However it would be good to see more exhaustive testing around these permissions because the ProjectPolicy specs don't cover well these scenarios with `public builds`. That's why after changing the policy, none of the tests failed.
issue