diff --git a/features/project/source/browse_files.feature b/features/project/source/browse_files.feature
index b7d70881d56cf2127fecf431b495ff34a71c6840..6ea64f700927567b583ba938199ba9c36f77cb90 100644
--- a/features/project/source/browse_files.feature
+++ b/features/project/source/browse_files.feature
@@ -50,6 +50,16 @@ Feature: Project Source Browse Files
     And I click button "Edit"
     Then I can edit code
 
+  Scenario: If the file is binary the edit link is hidden
+    Given I visit a binary file in the repo
+    Then I cannot see the edit button
+
+  Scenario: If I don't have edit permission the edit link is disabled
+    Given public project "Community"
+    And I visit project "Community" source page
+    And I click on ".gitignore" file in repo
+    Then The edit button is disabled
+
   @javascript
   Scenario: I can edit and commit file
     Given I click on ".gitignore" file in repo
diff --git a/features/steps/project/source/browse_files.rb b/features/steps/project/source/browse_files.rb
index ddd501d4f88288159e9687794327715465d7f5f3..805e6ff0eac1b0607b0b2a108fc6df0775bbf5c2 100644
--- a/features/steps/project/source/browse_files.rb
+++ b/features/steps/project/source/browse_files.rb
@@ -48,6 +48,14 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps
     click_link 'Edit'
   end
 
+  step 'I cannot see the edit button' do
+    page.should_not have_link 'edit'
+  end
+
+  step 'The edit button is disabled' do
+    page.should have_css '.disabled', text: 'Edit'
+  end
+
   step 'I can edit code' do
     set_new_content
     evaluate_script('editor.getValue()').should == new_gitignore_content
diff --git a/features/steps/shared/paths.rb b/features/steps/shared/paths.rb
index b60d290ae9c224e2f1fdd84e74e955b0f8393903..e657fceb70448432d78f79f827e041aa4f7d1d80 100644
--- a/features/steps/shared/paths.rb
+++ b/features/steps/shared/paths.rb
@@ -183,6 +183,11 @@ module SharedPaths
     visit project_tree_path(@project, root_ref)
   end
 
+  step 'I visit a binary file in the repo' do
+    visit project_blob_path(@project, File.join(
+      root_ref, 'files/images/logo-black.png'))
+  end
+
   step "I visit my project's commits page" do
     visit project_commits_path(@project, root_ref, {limit: 5})
   end
@@ -385,6 +390,11 @@ module SharedPaths
     visit project_path(project)
   end
 
+  step 'I visit project "Community" source page' do
+    project = Project.find_by(name: 'Community')
+    visit project_tree_path(project, root_ref)
+  end
+
   step 'I visit project "Internal" page' do
     project = Project.find_by(name: "Internal")
     visit project_path(project)