cucumber-wordpress 1.0 → 1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ *.gemspec
2
+ pkg
data/README.rdoc CHANGED
@@ -9,7 +9,7 @@ Install the gem:
9
9
 
10
10
  Copy the examples/features/ directory into an existing WordPress installation:
11
11
  cd wordpress-installation
12
- cp /usr/lib/ruby/gems/1.8/gems/cucumber-wordpress-1.0/examples/features .
12
+ cp -R /usr/lib/ruby/gems/1.8/gems/cucumber-wordpress-1.0/examples/features .
13
13
 
14
14
  Configure wp-config variables:
15
15
  vim features/support/config.yml
@@ -27,7 +27,7 @@ Run cucumber:
27
27
 
28
28
  == Patches
29
29
 
30
- * Send me a pull request via GitHub or an email at tom@thedextrousweb.com.
30
+ * Send me a pull request via GitHub or via email.
31
31
 
32
32
  == Author
33
33
 
@@ -35,4 +35,4 @@ Run cucumber:
35
35
 
36
36
  == Copyright
37
37
 
38
- Copyright (c) 2009 The Dextrous Web. See LICENCE for details.
38
+ Copyright © 2009 The Dextrous Web. See LICENCE for details.
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  begin
2
2
  require 'jeweler'
3
3
  Jeweler::Tasks.new do |gem|
4
- gem.version = "1.0"
4
+ gem.version = "1.1"
5
5
  gem.name = "cucumber-wordpress"
6
6
  gem.summary = %Q{Environment setup and step definitions for testing WordPress with Cucumber}
7
7
  gem.email = "tom@thedextrousweb.com"
@@ -20,77 +20,17 @@ end
20
20
 
21
21
  require 'cucumber-wordpress'
22
22
  require 'cucumber-wordpress/steps'
23
-
24
- # Get the WordPress configuration for this site
25
23
  WordPress.configure(YAML::load(open(File.join(File.dirname(__FILE__),'config.yml'))))
26
-
27
- # Hide the original wp-config.php, and write our own
28
24
  WordPress.write_config
29
25
  WordPress.create_db
30
-
31
26
  at_exit do
32
- # Replace the original wp-config.php (if it existed)
33
27
  WordPress.reset_config
34
28
  WordPress.drop_db
35
29
  end
36
-
37
- # Before every scenario, reset the DB to how it was when it was first installed
38
30
  Before do |scenario|
39
31
  WordPress.reset_db
40
32
  end
41
33
 
42
34
  #
43
35
  # And we're done!
44
- # Apart from a couple of patches we need to apply to webrat...
45
36
  #
46
-
47
- # For some reason the MechanizeAdapter uses response_body instead of response.body.
48
- # This is needed
49
- module Webrat
50
- class Session
51
- include Spec::Mocks::ExampleMethods
52
- def response
53
- m = mock
54
- m.should_receive(:body).any_number_of_times.and_return(response_body)
55
- m
56
- end
57
- end
58
- end
59
-
60
- # Use XPath in click_link_within, etc.
61
- # This is needed too
62
- module Webrat
63
- class Scope
64
- protected
65
-
66
- def xpath_scoped_dom
67
- Webrat::XML.xpath_at(@scope.dom, @selector)
68
- end
69
-
70
- def scoped_dom
71
- begin
72
- Webrat::XML.css_at(@scope.dom, @selector)
73
- rescue Nokogiri::CSS::SyntaxError, Nokogiri::XML::XPath::SyntaxError => e
74
- begin
75
- # That was not a css selector, mayby it's an xpath selector?
76
- xpath_scoped_dom
77
- rescue
78
- # Raise original css syntax error if selector is not xpath either
79
- raise e
80
- end
81
- end
82
- end
83
- end
84
- end
85
-
86
- # Fix attach_file so it works with mechanize
87
- # Thanks: https://webrat.lighthouseapp.com/projects/10503/tickets/303-tiny-patch-for-attach_file-to-work-with-mechanize
88
- # This is not needed for cucumber-wordpress (yet)
89
- module Webrat
90
- class FileField < Field
91
- protected
92
- def test_uploaded_file
93
- open(@value)
94
- end
95
- end
96
- end
@@ -1,16 +1,14 @@
1
1
  Given /^WordPress is installed$/ do
2
2
  visit path_to 'homepage'
3
3
  title = 'A Very Boring Test Title'
4
- if response.body.include? '<title>WordPress &rsaquo; Installation</title>'
4
+ if response.include? '<title>WordPress &rsaquo; Installation</title>'
5
5
  fill_in('Blog Title', :with => title)
6
- fill_in('Your E-mail', :with => 'test@wordpress.org')
6
+ fill_in('Your E-mail', :with => 'test@example.org')
7
7
  click_button('Install WordPress')
8
- WordPress.passwords = {'admin' => response.body.match(%r[<td><code>(.+)</code><br />])[1]}
9
- end
10
- visit path_to 'homepage'
11
- unless response.body.include? "<title> #{title}</title>"
12
- raise Exception
8
+ WordPress.passwords = {'admin' => response.match(%r[<td><code>(.+)</code><br />])[1]}
13
9
  end
10
+ visit path_to 'login page'
11
+ response.should include "<title>#{title} &rsaquo; Log In</title>"
14
12
 
15
13
  # Take this so we can reset the DB before each scenario
16
14
  WordPress.original_contents = {}
@@ -35,6 +33,12 @@ Given /^I am logged in as "([^\"]*)"$/ do |user|
35
33
  click_button('Log In')
36
34
  end
37
35
 
36
+ Given /^theme "([^\"]*)" is enabled$/ do |theme|
37
+ Given 'I am logged in as "admin"'
38
+ Given 'I am on manage themes'
39
+ click_link_within %Q&//a[contains(@title,"#{theme}")]/..&, 'Activate'
40
+ end
41
+
38
42
  Given /^plugin "([^\"]*)" is (enabled|disabled)$/ do |plugin,able|
39
43
  Given 'I am logged in as "admin"'
40
44
  visit path_to 'admin dashboard'
@@ -50,7 +54,7 @@ Given /^plugin "([^\"]*)" is (enabled|disabled)$/ do |plugin,able|
50
54
  end
51
55
 
52
56
  Then /^there should be (\d+) posts?$/ do |count|
53
- WordPress.mysql.query("select count(*) from #{WordPress.TABLE_PREFIX}posts where ID != 1 and post_type = 'post'").fetch_row.first.to_i.should == count.to_i
57
+ WordPress.mysql.query("select count(*) from #{WordPress.TABLE_PREFIX}posts where ID != 1 and post_type = 'post' and post_status != 'trash'").fetch_row.first.to_i.should == count.to_i
54
58
  end
55
59
 
56
60
  Then /^there should be (\d+) categories?$/ do |count|
@@ -67,5 +71,5 @@ Then /^there should be a post called "([^\"]*)"$/ do |post|
67
71
  end
68
72
 
69
73
  Then /^there should be a post called "([^\"]*)" in the "([^\"]*)" category$/ do |post, category|
70
- WordPress.mysql.query("select count(*) > 0 from #{WordPress.TABLE_PREFIX}terms join #{WordPress.TABLE_PREFIX}term_relationships join #{WordPress.TABLE_PREFIX}posts where (post_title = '#{Mysql.escape_string(post)}' or post_name = '#{Mysql.escape_string(post)}') and (name = '#{Mysql.escape_string(category)}' or slug = '#{Mysql.escape_string(category)}')").fetch_row.first.to_i.should == 1
74
+ WordPress.mysql.query("select count(*) > 0 from #{WordPress.TABLE_PREFIX}terms join #{WordPress.TABLE_PREFIX}term_relationships join #{WordPress.TABLE_PREFIX}posts where term_id = term_taxonomy_id and ID = object_id and (post_title = '#{Mysql.escape_string(post)}' or post_name = '#{Mysql.escape_string(post)}') and (name = '#{Mysql.escape_string(category)}' or slug = '#{Mysql.escape_string(category)}')").fetch_row.first.to_i.should == 1
71
75
  end
@@ -9,10 +9,12 @@ class WordPress
9
9
  self.instance.send(method, *args)
10
10
  end
11
11
 
12
- attr_accessor :passwords, :mysql, :original_contents
13
- attr_accessor :WEBHOST, :DB_NAME, :DB_USER, :DB_PASSWORD, :DB_HOST, :DB_CHARSET, :DB_COLLATE, :TABLE_PREFIX
12
+ attr_accessor :config, :passwords, :mysql, :original_contents
13
+ attr_accessor :ABSPATH, :WEBHOST, :DB_NAME, :DB_USER, :DB_PASSWORD, :DB_HOST, :DB_CHARSET, :DB_COLLATE, :TABLE_PREFIX
14
14
 
15
15
  def configure(data)
16
+ @config = data
17
+ @ABSPATH = data['ABSPATH'].to_s
16
18
  @WEBHOST = data['WEBHOST'].to_s
17
19
  @DB_NAME = data['DB_NAME'].to_s
18
20
  @DB_USER = data['DB_USER'].to_s
@@ -35,11 +37,11 @@ class WordPress
35
37
 
36
38
  def write_config
37
39
  # Copy production DB elsewhere
38
- @has_config = File.exist? 'wp-config.php'
39
- FileUtils.cp 'wp-config.php', '.wp-config.php' if @has_config
40
+ @has_config = File.exist? File.join(@ABSPATH,'wp-config.php')
41
+ FileUtils.cp File.join(@ABSPATH,'wp-config.php'), File.join(@ABSPATH,'.wp-config.php') if @has_config
40
42
 
41
43
  # Write our own
42
- open('wp-config.php','w+') do |f|
44
+ open(File.join(@ABSPATH,'wp-config.php'),'w+') do |f|
43
45
  f.write <<HERE
44
46
  <?php
45
47
  define('DB_NAME', '#{@DB_NAME}');
@@ -56,8 +58,8 @@ HERE
56
58
  end
57
59
 
58
60
  def reset_config
59
- FileUtils.rm 'wp-config.php'
60
- FileUtils.mv '.wp-config.php', 'wp-config.php' if @has_config
61
+ FileUtils.rm File.join(@ABSPATH,'wp-config.php')
62
+ FileUtils.mv File.join(@ABSPATH,'.wp-config.php'), File.join(@ABSPATH,'wp-config.php') if @has_config
61
63
  end
62
64
 
63
65
  def reset_db
@@ -78,12 +80,19 @@ HERE
78
80
  '/wp-login.php'
79
81
  when /^admin dashboard$/
80
82
  '/wp-admin/'
81
- when /^upload new consultation$/
82
- '/wp-admin/consultation-new.php'
83
+ when /^new post$/
84
+ '/wp-admin/post-new.php'
83
85
  when /^media library$/
84
86
  "/wp-admin/upload.php"
87
+ when /^manage themes$/
88
+ '/wp-admin/themes.php'
89
+ when /^new page$/
90
+ '/wp-admin/page-new.php'
91
+ when /^post "(.+?)"$/
92
+ id = WordPress.mysql.query(%Q'SELECT ID FROM #{WordPress.TABLE_PREFIX}posts WHERE post_title="#{$1}"').fetch_row.first.to_i
93
+ WordPress.php("echo get_permalink(#{id})")
85
94
  else
86
- raise "Can't find mapping from \"#{page_name}\" to a path.\n"
95
+ return nil
87
96
  end
88
97
  URI::join("http://#{@WEBHOST}/", partial)
89
98
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber-wordpress
3
3
  version: !ruby/object:Gem::Version
4
- version: "1.0"
4
+ version: "1.1"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Adams
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-19 00:00:00 +00:00
12
+ date: 2009-12-23 00:00:00 +00:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -51,6 +51,7 @@ extensions: []
51
51
  extra_rdoc_files:
52
52
  - README.rdoc
53
53
  files:
54
+ - .gitignore
54
55
  - LICENCE
55
56
  - README.rdoc
56
57
  - Rakefile