rsutphin-cf_case_check 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,139 @@
1
+ require File.expand_path('../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe CaseCheck::Cfmodule::Name do
4
+ before(:each) do
5
+ # cfmodule with the name attribute searches in the custom tag directories
6
+ CaseCheck::CustomTag.directories = %w(/tmp/cfmod_specs/customtags)
7
+ CaseCheck::CustomTag.directories.each { |d| FileUtils.mkdir_p d }
8
+
9
+ @source = create_test_source("/tmp/cfmod_specs/theapp/quux.cfm", <<-CFM)
10
+ <cfsetting showdebugoutput="No" />
11
+ <cfif StructKeyExists(url,'protocol_id') AND StructKeyExists(url,'affiliate_id')>
12
+ <cfif session.theSecurityBaseObj.HasRoleAtAffiliate(Role='TeamLeader',AffiliateID=url.affiliate_id)>
13
+ <cfscript>
14
+ variables.protocolDao = CreateObject('component', '#application.pathToComponents#ProtocolDAO').init(datasource=application.db,
15
+ username=session.netid,
16
+ userIP=cgi.remote_addr);
17
+
18
+ variables.protocolDao.updateProtocol(protocolID=url.protocol_id, gcrcNumber=form.value);
19
+ </cfscript>
20
+
21
+ <cfoutput>#form.value#</cfoutput>
22
+
23
+ <cfmodule name="notis.ActivityLog" type="UPDATE GCRC" target="#url.protocol_id#">
24
+ </cfif>
25
+ </cfif>
26
+ CFM
27
+ end
28
+
29
+ after(:each) do
30
+ FileUtils.rm_r '/tmp/cfmod_specs'
31
+ end
32
+
33
+ def actual_search
34
+ CaseCheck::Cfmodule.search(@source)
35
+ end
36
+
37
+ it "has a human-readable name" do
38
+ actual_search.first.type_name.should == 'cfmodule with name'
39
+ end
40
+
41
+ it "converts the dotted name into a slashed path" do
42
+ actual_search.first.expected_path.should == "notis/ActivityLog.cfm"
43
+ end
44
+
45
+ it "resolves against the configured custom tag directories" do
46
+ expected_file = CaseCheck::CustomTag.directories.last + "/notis/ActivityLog.cfm"
47
+ touch expected_file
48
+ actual_search.first.resolved_to.should == expected_file
49
+ actual_search.first.resolution.should == :exact
50
+ end
51
+
52
+ it "does not resolve against subdirectories of the custom tag directories" do
53
+ expected_file = CaseCheck::CustomTag.directories.last + "/subdir/notis/ActivityLog.cfm"
54
+ touch expected_file
55
+ actual_search.first.resolved_to.should be_nil
56
+ end
57
+
58
+ it "resolves case-insensitively against the configured custom tag directories" do
59
+ expected_file = CaseCheck::CustomTag.directories.last + "/notis/ActiviTYLog.cfm"
60
+ touch expected_file
61
+ actual_search.first.resolved_to.should == expected_file
62
+ actual_search.first.resolution.should == :case_insensitive
63
+ end
64
+
65
+ it "finds multiple cfmodule references" do
66
+ @source.content = <<-CFM
67
+ <cfmodule name="etc"/>
68
+ <cfmodule name="etal">
69
+ CFM
70
+ actual_search.should have(2).references
71
+ end
72
+
73
+ it "finds the cfmodule tag without regard to case" do
74
+ @source.content = <<-CFM
75
+ <cfMODule name="whatever">
76
+ CFM
77
+ actual_search.should have(1).reference
78
+ end
79
+ end
80
+
81
+ describe CaseCheck::Cfmodule::Template do
82
+ before(:each) do
83
+ @source = create_test_source("/tmp/cfmod_specs/theapp/quux.cfm", <<-CFM)
84
+ <CFOUTPUT>
85
+ <CFIF StoredQueryID GT 0>
86
+ storedqueryid : #StoredQueryID#
87
+ <CFModule Template="GetTheStoredStatement.cfm" datasource="#tablespace#" QueryName="#StoredQueryName#"
88
+ category="#querycategory#" sq_id=#StoredQueryID#>
89
+ <CFSET sqlstatement=TheStoredStatement>
90
+ </CFIF>
91
+ </CFOUTPUT>
92
+ CFM
93
+ end
94
+
95
+ after(:each) do
96
+ FileUtils.rm_r '/tmp/cfmod_specs'
97
+ end
98
+
99
+ def actual_search
100
+ CaseCheck::Cfmodule.search(@source)
101
+ end
102
+
103
+ it "has a human-readable name" do
104
+ actual_search.first.type_name.should == 'cfmodule with template'
105
+ end
106
+
107
+ it "uses the template path as the path" do
108
+ actual_search.first.expected_path.should == "GetTheStoredStatement.cfm"
109
+ end
110
+
111
+ it "resolves against file directory" do
112
+ expected_file = "/tmp/cfmod_specs/theapp/GetTheStoredStatement.cfm"
113
+ touch expected_file
114
+ actual_search.first.resolved_to.should == expected_file
115
+ actual_search.first.resolution.should == :exact
116
+ end
117
+
118
+ it "resolves against file directory case-insensitively" do
119
+ expected_file = "/tmp/cfmod_specs/theapp/GetTheSTOREDStatement.cfm"
120
+ touch expected_file
121
+ actual_search.first.resolved_to.should == expected_file
122
+ actual_search.first.resolution.should == :case_insensitive
123
+ end
124
+
125
+ it "finds multiple cfmodule references" do
126
+ @source.content = <<-CFM
127
+ <cfmodule template="etc"/>
128
+ <cfmodule template="etal">
129
+ CFM
130
+ actual_search.should have(2).references
131
+ end
132
+
133
+ it "finds the cfmodule tag without regard to case" do
134
+ @source.content = <<-CFM
135
+ <cfMODule template="whatever">
136
+ CFM
137
+ actual_search.should have(1).reference
138
+ end
139
+ end
@@ -0,0 +1,143 @@
1
+ require File.expand_path('../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe CaseCheck::CustomTag do
4
+ before(:each) do
5
+ CaseCheck::CustomTag.directories = %w(/tmp/ctr_specs/customtags)
6
+ CaseCheck::CustomTag.directories.each { |d| FileUtils.mkdir_p d }
7
+
8
+ @source = create_test_source("/tmp/ctr_specs/theapp/quux.cfm", <<-CFM)
9
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
10
+ <html>
11
+ <head>
12
+ <title>Delete Risk Factors</title>
13
+ </head>
14
+
15
+ <body>
16
+ <CFQUERY NAME="DELETEPD" datasource=#application.db#>
17
+ UPDATE T_BRST_CIGALCHL
18
+ SET IS_DELETED = 'Y',
19
+ CHANGED_DATE = SYSDATE,
20
+ CHANGED_BY = '#session.netid#',
21
+ CHANGED_IP= '#cgi.remote_addr#'
22
+ WHERE PATIENT_ID = #URL.PATIENT_ID#
23
+ </CFQUERY>
24
+
25
+ <CF_ActivityLog activity_type="DELETE T_BRST_CIGALCHL" target="PATIENT_ID = #URL.PATIENT_ID#">
26
+
27
+
28
+ <CFOUTPUT>
29
+ <CF_DeleteRecordLog
30
+ PATIENT_ID=#URL.PATIENT_ID#
31
+ SSN="#URL.SSN#"
32
+ LAST_NAME="#URL.LAST_NAME#"
33
+ FIRST_NAME="#URL.FIRST_NAME#"
34
+ MIDDLE_NAME="#URL.MI#"
35
+ DESCRIPTION="Alcohol & Cigarettes"
36
+ TABLE_NAME="T_BRST_CIGALCHL"
37
+ REVERSED_CODE="PATIENT_ID = #URL.PATIENT_ID#"
38
+ >
39
+ </CFOUTPUT>
40
+
41
+ </body>
42
+ </html>
43
+
44
+ <SCRIPT LANGUAGE = "JavaScript1.2">
45
+ this.window.close();
46
+ </SCRIPT>
47
+ CFM
48
+ end
49
+
50
+ after(:each) do
51
+ FileUtils.rm_r '/tmp/ctr_specs'
52
+ end
53
+
54
+ def actual_search
55
+ CaseCheck::CustomTag.search(@source)
56
+ end
57
+
58
+ it "has a human-readable name" do
59
+ actual_search.first.type_name.should == 'custom tag'
60
+ end
61
+
62
+ it "translates lower case cf_ style" do
63
+ @source.content = <<-CFM
64
+ <div align="center"><cf_checkuserpermissions groups="Admin">
65
+ <input type="submit" name="submit" value="Save" >
66
+ </cf_checkuserpermissions>
67
+ </div>
68
+ CFM
69
+
70
+ actual_search.should have(1).reference
71
+ actual_search.first.expected_path.should == "checkuserpermissions.cfm"
72
+ end
73
+
74
+ it "translates upper case CF_ style" do
75
+ @source.content = %q(<CF_ActivityLog activity_type="INSERT T_BRST_INSURANCE_SELECT" target="INSURANCE_ID=#QID.ID#">)
76
+
77
+ actual_search.should have(1).reference
78
+ actual_search.first.expected_path.should == "ActivityLog.cfm"
79
+ end
80
+
81
+ it "terminates correctly for self-closing tags" do
82
+ @source.content = %q(<cf_abc/>and then some)
83
+ actual_search.first.text.should == "cf_abc"
84
+ end
85
+
86
+ it "finds multiple refs in a single body" do
87
+ actual_search.should have(2).references
88
+ actual_search.first.expected_path.should == "ActivityLog.cfm"
89
+ actual_search.last.expected_path.should == "DeleteRecordLog.cfm"
90
+ end
91
+
92
+ it "records the line number for each match" do
93
+ actual_search.should have(2).references
94
+ actual_search.first.line.should == 17
95
+ actual_search.last.line.should == 21
96
+ end
97
+
98
+ it "records the text for each match" do
99
+ actual_search.should have(2).references
100
+ actual_search.first.text.should == "CF_ActivityLog"
101
+ actual_search.last.text.should == "CF_DeleteRecordLog"
102
+ end
103
+
104
+ it "resolves nothing if file not found" do
105
+ actual_search.first.resolved_to.should be_nil
106
+ actual_search.first.resolution.should be_nil
107
+ end
108
+
109
+ it "resolves an exactly matching file in the same directory as the source if it exists" do
110
+ expected_file = "/tmp/ctr_specs/theapp/ActivityLog.cfm"
111
+ FileUtils.touch expected_file
112
+ actual_search.first.resolved_to.should == expected_file
113
+ actual_search.first.resolution.should == :exact
114
+ end
115
+
116
+ it "resolves the case-insensitive equivalent in the same directory as the source if it exists" do
117
+ expected_file = "/tmp/ctr_specs/theapp/ActivityLOG.cfm"
118
+ FileUtils.touch expected_file
119
+ actual_search.first.resolved_to.should == expected_file
120
+ actual_search.first.resolution.should == :case_insensitive
121
+ end
122
+
123
+ it "resolves the exact file from one of the customtag directories if it exists" do
124
+ expected_file = CaseCheck::CustomTag.directories.last + "/ActivityLog.cfm"
125
+ FileUtils.touch expected_file
126
+ actual_search.first.resolved_to.should == expected_file
127
+ actual_search.first.resolution.should == :exact
128
+ end
129
+
130
+ it "resolves the case-insensitive equivalent from one of the customtag directories if it exists" do
131
+ expected_file = CaseCheck::CustomTag.directories.last + "/activitylog.cFM"
132
+ FileUtils.touch expected_file
133
+ actual_search.first.resolved_to.should == expected_file
134
+ actual_search.first.resolution.should == :case_insensitive
135
+ end
136
+
137
+ it "resolves the file from a subdirectory of one of customtag directories" do
138
+ expected_file = CaseCheck::CustomTag.directories.last + "/pkg/foo/ActivityLog.cfm"
139
+ touch expected_file
140
+ actual_search.first.resolved_to.should == expected_file
141
+ actual_search.first.resolution.should == :exact
142
+ end
143
+ end
@@ -0,0 +1,37 @@
1
+ require File.expand_path('../lib/case_check', File.dirname(__FILE__))
2
+ require 'fileutils'
3
+ require 'stringio'
4
+
5
+ Spec::Runner.configure do |config|
6
+ config.before do
7
+ CaseCheck.status_stream = StringIO.new
8
+ end
9
+
10
+ config.after do
11
+ CaseCheck.status_stream = nil
12
+ end
13
+
14
+ # == Mock Framework
15
+ #
16
+ # RSpec uses it's own mocking framework by default. If you prefer to
17
+ # use mocha, flexmock or RR, uncomment the appropriate line:
18
+ #
19
+ # config.mock_with :mocha
20
+ # config.mock_with :flexmock
21
+ # config.mock_with :rr
22
+ end
23
+
24
+ def create_test_source(filename, content)
25
+ FileUtils.mkdir_p File.dirname(filename)
26
+
27
+ File.open(filename, 'w') do |f|
28
+ f.write content
29
+ end
30
+
31
+ CaseCheck::ColdfusionSource.create(filename)
32
+ end
33
+
34
+ def touch(filename)
35
+ FileUtils.mkdir_p File.dirname(filename)
36
+ FileUtils.touch filename
37
+ end
metadata ADDED
@@ -0,0 +1,100 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rsutphin-cf_case_check
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Rhett Sutphin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-12-14 00:00:00 -08:00
13
+ default_executable: cf_case_check
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activesupport
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
23
+ version:
24
+ - !ruby/object:Gem::Dependency
25
+ name: bones
26
+ version_requirement:
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: 2.1.0
32
+ version:
33
+ description: A utility which walks a ColdFusion application's source and determines which includes, custom tags, etc, will not work with a case-sensitive filesystem
34
+ email: rhett@detailedbalance.net
35
+ executables:
36
+ - cf_case_check
37
+ extensions: []
38
+
39
+ extra_rdoc_files:
40
+ - History.txt
41
+ - README.txt
42
+ - bin/cf_case_check
43
+ files:
44
+ - .gitignore
45
+ - History.txt
46
+ - Manifest.txt
47
+ - README.txt
48
+ - Rakefile
49
+ - bin/cf_case_check
50
+ - lib/case_check.rb
51
+ - lib/case_check/coldfusion_source.rb
52
+ - lib/case_check/commands.rb
53
+ - lib/case_check/configuration.rb
54
+ - lib/case_check/core-ext.rb
55
+ - lib/case_check/reference.rb
56
+ - lib/case_check/references/cfc.rb
57
+ - lib/case_check/references/cfinclude.rb
58
+ - lib/case_check/references/cfmodule.rb
59
+ - lib/case_check/references/custom_tag.rb
60
+ - spec/coldfusion_source_spec.rb
61
+ - spec/commands_spec.rb
62
+ - spec/configuration_spec.rb
63
+ - spec/core_ext_spec.rb
64
+ - spec/reference_spec.rb
65
+ - spec/references/cfc_spec.rb
66
+ - spec/references/cfinclude_spec.rb
67
+ - spec/references/cfmodule_spec.rb
68
+ - spec/references/custom_tag_spec.rb
69
+ - spec/spec_helper.rb
70
+ has_rdoc: true
71
+ homepage: http://github.com/rsutphin/cf_case_check
72
+ post_install_message:
73
+ rdoc_options:
74
+ - --main
75
+ - README.txt
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: "0"
83
+ version:
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: "0"
89
+ version:
90
+ requirements: []
91
+
92
+ rubyforge_project: !binary |
93
+ AA==
94
+
95
+ rubygems_version: 1.2.0
96
+ signing_key:
97
+ specification_version: 2
98
+ summary: A utility which walks a ColdFusion application's source and determines which includes, custom tags, etc, will not work with a case-sensitive filesystem
99
+ test_files: []
100
+