waw 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENCE.rdoc +25 -0
- data/README.rdoc +32 -0
- data/bin/waw +32 -0
- data/bin/waw-profile +26 -0
- data/bin/waw-start +26 -0
- data/bin/wspec +33 -0
- data/layouts/empty/Rakefile +14 -0
- data/layouts/empty/config.ru +5 -0
- data/layouts/empty/config/commons.cfg +31 -0
- data/layouts/empty/config/devel.cfg +21 -0
- data/layouts/empty/ignore +7 -0
- data/layouts/empty/logs/dontforgetme +0 -0
- data/layouts/empty/resources/messages.rs +1 -0
- data/layouts/empty/test/wspec/site_respond.wspec +3 -0
- data/layouts/empty/test/wspec/test_all.rb +13 -0
- data/layouts/empty/waw.deploy +1 -0
- data/layouts/empty/waw.routing +6 -0
- data/layouts/static/dependencies +1 -0
- data/layouts/static/public/.wawaccess +18 -0
- data/layouts/static/public/css/style.css +0 -0
- data/layouts/static/public/images/dontforgetme +0 -0
- data/layouts/static/public/js/project.js +0 -0
- data/layouts/static/public/pages/.wawaccess +30 -0
- data/layouts/static/public/pages/404.wtpl +1 -0
- data/layouts/static/public/pages/index.wtpl +5 -0
- data/layouts/static/public/templates/.wawaccess +9 -0
- data/layouts/static/public/templates/layout.wtpl +17 -0
- data/layouts/static/test/wspec/static_pages_are_served.wspec +21 -0
- data/layouts/static/waw.routing +8 -0
- data/lib/waw.rb +99 -0
- data/lib/waw/commands/command.rb +115 -0
- data/lib/waw/commands/profile_command.rb +66 -0
- data/lib/waw/commands/start_command.rb +59 -0
- data/lib/waw/config.rb +110 -0
- data/lib/waw/controller.rb +25 -0
- data/lib/waw/controllers/action/action.rb +91 -0
- data/lib/waw/controllers/action/action_utils.rb +30 -0
- data/lib/waw/controllers/action/js_generation.rb +116 -0
- data/lib/waw/controllers/action_controller.rb +133 -0
- data/lib/waw/controllers/error/backtrace.rb +54 -0
- data/lib/waw/controllers/error_handler.rb +62 -0
- data/lib/waw/controllers/json_controller.rb +31 -0
- data/lib/waw/controllers/no_cache.rb +22 -0
- data/lib/waw/controllers/static/match.rb +80 -0
- data/lib/waw/controllers/static/waw_access.rb +235 -0
- data/lib/waw/controllers/static/waw_access_dsl.rb +48 -0
- data/lib/waw/controllers/static_controller.rb +37 -0
- data/lib/waw/default_config.cfg +14 -0
- data/lib/waw/environment_utils.rb +57 -0
- data/lib/waw/errors.rb +4 -0
- data/lib/waw/ext.rb +3 -0
- data/lib/waw/ext/core.rb +4 -0
- data/lib/waw/ext/core/hash.rb +47 -0
- data/lib/waw/ext/core/logger.rb +10 -0
- data/lib/waw/ext/core/module.rb +20 -0
- data/lib/waw/ext/core/object.rb +29 -0
- data/lib/waw/ext/rack.rb +19 -0
- data/lib/waw/ext/rack/builder.rb +43 -0
- data/lib/waw/ext/rack/delegator.rb +51 -0
- data/lib/waw/ext/rack/urlmap.rb +55 -0
- data/lib/waw/ext/wlang.rb +1 -0
- data/lib/waw/ext/wlang/hosted_language.rb +21 -0
- data/lib/waw/fullstate.rb +8 -0
- data/lib/waw/fullstate/on_class.rb +37 -0
- data/lib/waw/fullstate/on_instance.rb +27 -0
- data/lib/waw/fullstate/variable.rb +36 -0
- data/lib/waw/kern.rb +6 -0
- data/lib/waw/kern/app.rb +48 -0
- data/lib/waw/kern/empty/waw.deploy +0 -0
- data/lib/waw/kern/empty/waw.routing +1 -0
- data/lib/waw/kern/freezed_state.rb +32 -0
- data/lib/waw/kern/hooks.rb +53 -0
- data/lib/waw/kern/lifecycle.rb +248 -0
- data/lib/waw/kern/living_state.rb +87 -0
- data/lib/waw/kern/utils.rb +27 -0
- data/lib/waw/resource_collection.rb +100 -0
- data/lib/waw/restart.rb +32 -0
- data/lib/waw/routing.rb +43 -0
- data/lib/waw/routing/action_routing.rb +78 -0
- data/lib/waw/routing/dsl.rb +45 -0
- data/lib/waw/routing/feedback.rb +23 -0
- data/lib/waw/routing/form_validation_feedback.rb +36 -0
- data/lib/waw/routing/javascript.rb +17 -0
- data/lib/waw/routing/redirect.rb +26 -0
- data/lib/waw/routing/refresh.rb +17 -0
- data/lib/waw/routing/routing_rule.rb +16 -0
- data/lib/waw/scope_utils.rb +69 -0
- data/lib/waw/session.rb +51 -0
- data/lib/waw/testing.rb +1 -0
- data/lib/waw/tools/mail.rb +4 -0
- data/lib/waw/tools/mail/mail.rb +119 -0
- data/lib/waw/tools/mail/mail_agent.rb +123 -0
- data/lib/waw/tools/mail/mailbox.rb +62 -0
- data/lib/waw/tools/mail/template.rb +38 -0
- data/lib/waw/utils/dsl_helper.rb +116 -0
- data/lib/waw/validation.rb +175 -0
- data/lib/waw/validation/and_validator.rb +27 -0
- data/lib/waw/validation/array_validations.rb +38 -0
- data/lib/waw/validation/boolean_validator.rb +32 -0
- data/lib/waw/validation/comparison_validations.rb +45 -0
- data/lib/waw/validation/date_validator.rb +31 -0
- data/lib/waw/validation/default_validator.rb +30 -0
- data/lib/waw/validation/dsl_ruby_extensions.rb +11 -0
- data/lib/waw/validation/errors.rb +17 -0
- data/lib/waw/validation/ext.rb +3 -0
- data/lib/waw/validation/file_validator.rb +30 -0
- data/lib/waw/validation/float_validator.rb +19 -0
- data/lib/waw/validation/helpers.rb +67 -0
- data/lib/waw/validation/integer_validator.rb +16 -0
- data/lib/waw/validation/isin_validator.rb +24 -0
- data/lib/waw/validation/mandatory_validator.rb +17 -0
- data/lib/waw/validation/missing_validator.rb +17 -0
- data/lib/waw/validation/not_validator.rb +20 -0
- data/lib/waw/validation/or_validator.rb +34 -0
- data/lib/waw/validation/regexp_validator.rb +29 -0
- data/lib/waw/validation/same_validator.rb +16 -0
- data/lib/waw/validation/signature.rb +157 -0
- data/lib/waw/validation/size_validations.rb +44 -0
- data/lib/waw/validation/string_validator.rb +15 -0
- data/lib/waw/validation/validator.rb +48 -0
- data/lib/waw/wawgen.rb +2 -0
- data/lib/waw/wawgen/create.rb +166 -0
- data/lib/waw/wawgen/project.rb +25 -0
- data/lib/waw/wspec.rb +5 -0
- data/lib/waw/wspec/browser.rb +240 -0
- data/lib/waw/wspec/dsl.rb +201 -0
- data/lib/waw/wspec/html_analysis.rb +136 -0
- data/lib/waw/wspec/html_analysis/tag.rb +56 -0
- data/lib/waw/wspec/runner.rb +70 -0
- data/lib/waw/wspec/scenario.rb +35 -0
- data/lib/waw/wspec/suite.rb +54 -0
- data/test/bricks/error_handler/config/test.cfg +2 -0
- data/test/bricks/error_handler/logs/webapp.log +1411 -0
- data/test/bricks/error_handler/test/error_handler.wspec +16 -0
- data/test/bricks/error_handler/waw.deploy +1 -0
- data/test/bricks/error_handler/waw.routing +27 -0
- data/test/integration/waw_create_integration_test.rb +24 -0
- data/test/spec/assumptions_spec.rb +30 -0
- data/test/spec/controllers/action_controller_spec.rb +14 -0
- data/test/spec/controllers/static/waw_access_spec.rb +112 -0
- data/test/spec/environment_utils_spec.rb +15 -0
- data/test/spec/ext/core/hash_spec.rb +58 -0
- data/test/spec/fixtures.rb +41 -0
- data/test/spec/fixtures/action/config/default.cfg +2 -0
- data/test/spec/fixtures/action/lib/action_controller_test.rb +12 -0
- data/test/spec/fixtures/action/waw.deploy +1 -0
- data/test/spec/fixtures/action/waw.routing +6 -0
- data/test/spec/fixtures/empty/waw.deploy +0 -0
- data/test/spec/fixtures/empty/waw.routing +0 -0
- data/test/spec/fullstate/on_class_spec.rb +59 -0
- data/test/spec/fullstate/on_instance_spec.rb +59 -0
- data/test/spec/fullstate/session_spec.rb +43 -0
- data/test/spec/fullstate/variable_spec.rb +55 -0
- data/test/spec/resource_collection_spec.rb +50 -0
- data/test/spec/test_all.rb +9 -0
- data/test/spec/tools/mail/mail_agent_spec.rb +116 -0
- data/test/spec/tools/mail/mail_spec.rb +56 -0
- data/test/spec/tools/mail/mailbox_spec.rb +57 -0
- data/test/spec/tools/mail/template_spec.rb +47 -0
- data/test/spec/validation/array_validation_spec.rb +63 -0
- data/test/spec/validation/array_validator_spec.rb +17 -0
- data/test/spec/validation/date_validation_spec.rb +35 -0
- data/test/spec/validation/default_validation_spec.rb +37 -0
- data/test/spec/validation/disjuctive_validation_spec.rb +33 -0
- data/test/spec/validation/errors_spec.rb +37 -0
- data/test/spec/validation/file_validator_spec.rb +34 -0
- data/test/spec/validation/mail_validation_spec.rb +51 -0
- data/test/spec/validation/missing_validation_spec.rb +43 -0
- data/test/spec/validation/same_validation_spec.rb +24 -0
- data/test/spec/validation/signature_intuition_spec.rb +37 -0
- data/test/spec/validation/signature_spec.rb +164 -0
- data/test/spec/validation/validation_spec.rb +28 -0
- data/test/spec/wspec/html_analysis/tag_spec.rb +38 -0
- data/test/spec/wspec/html_analysis_spec.rb +170 -0
- data/test/unit/test_all.rb +8 -0
- data/test/unit/waw/app_test.rb +126 -0
- data/test/unit/waw/app_test/config/commons.cfg +2 -0
- data/test/unit/waw/app_test/config/devel.cfg +1 -0
- data/test/unit/waw/config_test.rb +54 -0
- data/test/unit/waw/controllers/action_controller_test.rb +76 -0
- data/test/unit/waw/controllers/action_test.rb +35 -0
- data/test/unit/waw/controllers/example_action_controller_test.rb +24 -0
- data/test/unit/waw/controllers/multiple_action_controller_test.rb +78 -0
- data/test/unit/waw/controllers/static/example/css/example.css +1 -0
- data/test/unit/waw/controllers/static/example/index.html +1 -0
- data/test/unit/waw/controllers/static/example/js/example.js +1 -0
- data/test/unit/waw/controllers/static/example/pages/hello.wtpl +1 -0
- data/test/unit/waw/controllers/static/waw_access_test.rb +76 -0
- data/test/unit/waw/ext/rack_test.rb +74 -0
- data/test/unit/waw/resource_collection_test.rb +49 -0
- data/test/unit/waw/resources.txt +4 -0
- data/test/unit/waw/routing/routing_test.rb +26 -0
- data/test/unit/waw/utils/dsl_helper_test.rb +79 -0
- data/test/unit/waw/utils/dsl_helper_test_extensions1.rb +4 -0
- data/test/unit/waw/validation/signature_test.rb +193 -0
- data/test/unit/waw/validation_test.rb +319 -0
- data/test/unit/waw/wspec/html_analysis_test.html +81 -0
- data/test/unit/waw/wspec/html_analysis_test.rb +26 -0
- metadata +272 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'waw'
|
2
|
+
describe ::Waw::Session do
|
3
|
+
include ::Waw::Fixtures
|
4
|
+
before(:each) { load_empty_app }
|
5
|
+
after(:each) { unload_empty_app }
|
6
|
+
|
7
|
+
def session
|
8
|
+
@empty_app.session
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should allows being extended" do
|
12
|
+
class ::Waw::Session
|
13
|
+
session_var :my_variable, 15
|
14
|
+
end
|
15
|
+
(session.my_variable = 12).should == 12
|
16
|
+
session.my_variable.should == 12
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should allow resetting variables" do
|
20
|
+
class ::Waw::Session
|
21
|
+
session_var :my_variable, 15
|
22
|
+
end
|
23
|
+
session.my_variable = 12
|
24
|
+
session.reset(:my_variable)
|
25
|
+
session.my_variable.should == 15
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should allow query variables without parameters" do
|
29
|
+
class ::Waw::Session
|
30
|
+
session_var(:my_query){ "hello" }
|
31
|
+
end
|
32
|
+
session.my_query.should == "hello"
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should allow query variables with parameters" do
|
36
|
+
class ::Waw::Session
|
37
|
+
session_var(:my_id, 12)
|
38
|
+
session_var(:my_query){|session| session.my_id }
|
39
|
+
end
|
40
|
+
session.my_query.should == 12
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require "waw"
|
2
|
+
describe Waw::FullState::Variable do
|
3
|
+
include ::Waw::Fixtures
|
4
|
+
before(:each) { load_empty_app }
|
5
|
+
after(:each) { unload_empty_app }
|
6
|
+
|
7
|
+
# Creates a variable instance
|
8
|
+
def variable(name, default_value = nil, &block)
|
9
|
+
Waw::FullState::Variable.new(name, default_value, &block)
|
10
|
+
rescue => ex
|
11
|
+
raise ex
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should accept respect assignation" do
|
15
|
+
var = variable(:name)
|
16
|
+
(var.value = 12).should == 12
|
17
|
+
var.value.should == 12
|
18
|
+
var.value += 1
|
19
|
+
var.value.should == 13
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should respect default values" do
|
23
|
+
var = variable(:name, 12)
|
24
|
+
var.value.should == 12
|
25
|
+
var.value += 1
|
26
|
+
var.value.should == 13
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should respect block default values" do
|
30
|
+
var = variable(:name){ "hello world" }
|
31
|
+
var.value.should == "hello world"
|
32
|
+
var.value = 1
|
33
|
+
var.value.should == 1
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should allow reset with a default value" do
|
37
|
+
var = variable(:name, 12)
|
38
|
+
var.value = 2
|
39
|
+
var.reset
|
40
|
+
var.value.should == 12
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should allow reset with a block as default" do
|
44
|
+
var = variable(:name){ "hello world" }
|
45
|
+
var.value = 2
|
46
|
+
var.reset
|
47
|
+
var.value.should == "hello world"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should detect bad usages" do
|
51
|
+
# don't know why it does not work
|
52
|
+
#variable(:name, 12){ 13 }.should raise_exception(ArgumentError)
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'waw'
|
2
|
+
describe ::Waw::ResourceCollection do
|
3
|
+
|
4
|
+
it "should support creating resources simply" do
|
5
|
+
resources = ::Waw::ResourceCollection.parse_resources <<-EOF
|
6
|
+
name 'hello'
|
7
|
+
who 12
|
8
|
+
EOF
|
9
|
+
resources.name.should == 'hello'
|
10
|
+
resources.who.should == 12
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should support default values" do
|
14
|
+
resources = ::Waw::ResourceCollection.parse_resources <<-EOF
|
15
|
+
EOF
|
16
|
+
resources.name('hello').should == 'hello'
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should support passing blocks" do
|
20
|
+
resources = ::Waw::ResourceCollection.parse_resources <<-EOF
|
21
|
+
what {|r| 12 }
|
22
|
+
EOF
|
23
|
+
resources.what.should == 12
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should support installing Proc as resources" do
|
27
|
+
resources = ::Waw::ResourceCollection.parse_resources <<-EOF
|
28
|
+
what Kernel.lambda { 12 }
|
29
|
+
EOF
|
30
|
+
Proc.should === resources.what
|
31
|
+
resources.what.call.should == 12
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should support self referencing" do
|
35
|
+
resources = ::Waw::ResourceCollection.parse_resources <<-EOF
|
36
|
+
who 'hello'
|
37
|
+
who2 who
|
38
|
+
EOF
|
39
|
+
resources.who2.should == 'hello'
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should support self referencing with blocks" do
|
43
|
+
resources = ::Waw::ResourceCollection.parse_resources <<-EOF
|
44
|
+
who {'hello'}
|
45
|
+
who2 who
|
46
|
+
EOF
|
47
|
+
resources.who2.should == 'hello'
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', '..', 'lib'))
|
2
|
+
require 'waw'
|
3
|
+
require 'spec/autorun'
|
4
|
+
require File.join(File.dirname(__FILE__), 'fixtures')
|
5
|
+
test_files = Dir[File.join(File.dirname(__FILE__), '**/*_spec.rb')]
|
6
|
+
test_files.each { |file|
|
7
|
+
require(file)
|
8
|
+
}
|
9
|
+
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'waw'
|
2
|
+
require 'waw/tools/mail'
|
3
|
+
describe ::Waw::Tools::MailAgent do
|
4
|
+
|
5
|
+
def agent
|
6
|
+
@agent ||= ::Waw::Tools::MailAgent.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it("should provide a mail helper, hiding the Mail class") {
|
10
|
+
mail = agent.mail("Subject", "Body", "sender", "receiver")
|
11
|
+
mail.is_a?(::Waw::Tools::MailAgent::Mail).should be_true
|
12
|
+
mail.subject.should == "Subject"
|
13
|
+
mail.body.should == "Body"
|
14
|
+
mail.from.should == "sender"
|
15
|
+
mail.to.should == ["receiver"]
|
16
|
+
}
|
17
|
+
|
18
|
+
it("should provide a template helper, hiding the Template class") {
|
19
|
+
template = agent.template("Subject", "Body", "sender", "receiver")
|
20
|
+
template.is_a?(::Waw::Tools::MailAgent::Template).should be_true
|
21
|
+
template.subject.should == "Subject"
|
22
|
+
template.body.should == "Body"
|
23
|
+
template.from.should == "sender"
|
24
|
+
template.to.should == ["receiver"]
|
25
|
+
}
|
26
|
+
|
27
|
+
it("should allow sending mails easily") {
|
28
|
+
agent << agent.mail("Subject", "Message", "sender", "receiver")
|
29
|
+
agent.mailbox("receiver").size.should == 1
|
30
|
+
mail = agent.mailbox("receiver").read(0)
|
31
|
+
mail.subject.should == "Subject"
|
32
|
+
mail.body.should == "Message"
|
33
|
+
}
|
34
|
+
|
35
|
+
it("should allow sending mails to many receivers") {
|
36
|
+
agent << agent.mail("Subject", "Message", "sender", "receiver1", "receiver2")
|
37
|
+
agent.mailbox("receiver1").size.should == 1
|
38
|
+
agent.mailbox("receiver2").size.should == 1
|
39
|
+
}
|
40
|
+
|
41
|
+
it("should allow sending carbon copies") {
|
42
|
+
mail = agent.mail("Subject", "Message", "sender", "receiver1")
|
43
|
+
mail.cc = ["cc@chefbe.net"]
|
44
|
+
mail.bcc = ["bcc@chefbe.net"]
|
45
|
+
agent << mail
|
46
|
+
agent.mailbox("receiver1").size.should == 1
|
47
|
+
agent.mailbox("cc@chefbe.net").size.should == 1
|
48
|
+
agent.mailbox("bcc@chefbe.net").size.should == 1
|
49
|
+
}
|
50
|
+
|
51
|
+
# it("should really send mails if we force it") {
|
52
|
+
# agent = ::Waw::Tools::MailAgent.new({:host => 'localhost', :port => 7654, :timeout => 1}, true)
|
53
|
+
# agent << mail("Subject", "Message", "sender", "receiver1", "receiver2")
|
54
|
+
# }
|
55
|
+
|
56
|
+
it("should support mail templates") {
|
57
|
+
agent.add_template(:waw_info, "Hi ${who}, and welcome in waw", "We've received your request ${id}", "info@waw.org")
|
58
|
+
mail = agent.to_mail(:waw_info, {:who => "guy", :id => 123})
|
59
|
+
mail.subject.should == "Hi guy, and welcome in waw"
|
60
|
+
mail.body.should == "We've received your request 123"
|
61
|
+
mail.from.should == "info@waw.org"
|
62
|
+
}
|
63
|
+
|
64
|
+
it("should provide a great job when working with templates") {
|
65
|
+
agent.add_template(:waw_info, "Hi ${who}, and welcome in waw", "We've received your request ${id}", "info@waw.org")
|
66
|
+
agent.send_mail(:waw_info, {:who => "guy", :id => 123}, "blambeau@gmail.com")
|
67
|
+
mailbox = agent.mailbox("blambeau@gmail.com")
|
68
|
+
mailbox.size.should == 1
|
69
|
+
mailbox[0].subject.should == "Hi guy, and welcome in waw"
|
70
|
+
mailbox[0].body.should == "We've received your request 123"
|
71
|
+
mailbox[0].from.should == "info@waw.org"
|
72
|
+
mailbox[0].to.should == ["blambeau@gmail.com"]
|
73
|
+
}
|
74
|
+
|
75
|
+
it("should provide a send_mail with signature 1") {
|
76
|
+
agent.send_mail agent.mail("Subject", "Message", "sender", "receiver1", "receiver2")
|
77
|
+
mail = agent.mailbox("receiver1")[0]
|
78
|
+
mail.subject.should == "Subject"
|
79
|
+
mail = agent.mailbox("receiver2")[0]
|
80
|
+
mail.subject.should == "Subject"
|
81
|
+
}
|
82
|
+
|
83
|
+
it("should provide a send_mail with signature 2") {
|
84
|
+
agent.add_template(:waw_info, "${subject}", "${body}", "info@waw.org", "receiver1", "receiver2")
|
85
|
+
agent.send_mail(:waw_info, {:subject => "hello", :body => "world"})
|
86
|
+
mail = agent.mailbox("receiver1")[0]
|
87
|
+
mail.subject.should == "hello"
|
88
|
+
mail.body.should == "world"
|
89
|
+
mail = agent.mailbox("receiver2")[0]
|
90
|
+
mail.subject.should == "hello"
|
91
|
+
mail.body.should == "world"
|
92
|
+
}
|
93
|
+
|
94
|
+
it("should provide a send_mail with signature 3") {
|
95
|
+
agent.add_template(:waw_info, "${subject}", "${body}", "info@waw.org")
|
96
|
+
agent.send_mail(:waw_info, {:subject => "hello", :body => "world"}, "receiver1", "receiver2")
|
97
|
+
mail = agent.mailbox("receiver1")[0]
|
98
|
+
mail.subject.should == "hello"
|
99
|
+
mail.body.should == "world"
|
100
|
+
mail = agent.mailbox("receiver2")[0]
|
101
|
+
mail.subject.should == "hello"
|
102
|
+
mail.body.should == "world"
|
103
|
+
}
|
104
|
+
|
105
|
+
it("should provide a send_mail with signature 4") {
|
106
|
+
agent.add_template(:waw_info, "${subject}", "${body}", "info@waw.org")
|
107
|
+
agent.send_mail(:waw_info, {:subject => "hello", :body => "world"}, ["receiver1", "receiver2"])
|
108
|
+
mail = agent.mailbox("receiver1")[0]
|
109
|
+
mail.subject.should == "hello"
|
110
|
+
mail.body.should == "world"
|
111
|
+
mail = agent.mailbox("receiver2")[0]
|
112
|
+
mail.subject.should == "hello"
|
113
|
+
mail.body.should == "world"
|
114
|
+
}
|
115
|
+
|
116
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'waw'
|
2
|
+
require 'waw/tools/mail'
|
3
|
+
describe ::Waw::Tools::MailAgent::Mail do
|
4
|
+
|
5
|
+
it "should correctly support encode/decode for testing purposes at least" do
|
6
|
+
mail = ::Waw::Tools::MailAgent::Mail.new
|
7
|
+
mail.from = "blambeau@gmail.com"
|
8
|
+
mail.to = ["blambeau@chefbe.net", "llambeau@chefbe.net"]
|
9
|
+
mail.cc = ["cc@chefbe.net"]
|
10
|
+
mail.bcc = ["bcc@chefbe.net"]
|
11
|
+
mail.subject = "This is a test mail"
|
12
|
+
mail.body = "Hello people"
|
13
|
+
|
14
|
+
mail = ::Waw::Tools::MailAgent::Mail.decode(mail.encode)
|
15
|
+
mail.from.should == "blambeau@gmail.com"
|
16
|
+
mail.to.should == ["blambeau@chefbe.net", "llambeau@chefbe.net"]
|
17
|
+
mail.cc.should == ["cc@chefbe.net"]
|
18
|
+
mail.bcc.should == ["bcc@chefbe.net"]
|
19
|
+
mail.subject.should == "This is a test mail"
|
20
|
+
mail.content_type.should == "text/plain"
|
21
|
+
mail.charset.should == "UTF-8"
|
22
|
+
mail.body.should == "Hello people"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should support encode/decode on long bodies" do
|
26
|
+
mail = ::Waw::Tools::MailAgent::Mail.new
|
27
|
+
body = <<-EOF
|
28
|
+
<p>This is a complex framework</p>
|
29
|
+
|
30
|
+
<p>But definitely fine!</p>
|
31
|
+
EOF
|
32
|
+
mail.body = body
|
33
|
+
mail.content_type = 'text/html'
|
34
|
+
|
35
|
+
mail.content_type.should == "text/html"
|
36
|
+
mail.charset.should == "UTF-8"
|
37
|
+
mail.body.should == body
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should provide a short form for initialize" do
|
41
|
+
mail = ::Waw::Tools::MailAgent::Mail.new("The subject", "The message", "me", "you")
|
42
|
+
mail.subject.should == "The subject"
|
43
|
+
mail.body.should == "The message"
|
44
|
+
mail.from.should == "me"
|
45
|
+
mail.to.should == ["you"]
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should support multiple receivers in the short form for initialize" do
|
49
|
+
mail = ::Waw::Tools::MailAgent::Mail.new("The subject", "The message", "me", "you", "us")
|
50
|
+
mail.subject.should == "The subject"
|
51
|
+
mail.body.should == "The message"
|
52
|
+
mail.from.should == "me"
|
53
|
+
mail.to.should == ["you", "us"]
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'waw'
|
2
|
+
require 'waw/tools/mail'
|
3
|
+
describe Waw::Tools::MailAgent::Mailbox do
|
4
|
+
|
5
|
+
# Returns a mail instance
|
6
|
+
def mail(subject)
|
7
|
+
mail = Waw::Tools::MailAgent::Mail.new
|
8
|
+
mail.subject = subject
|
9
|
+
mail
|
10
|
+
end
|
11
|
+
|
12
|
+
def mailbox(who)
|
13
|
+
Waw::Tools::MailAgent::Mailbox.new(who)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should allow pushing mails" do
|
17
|
+
mailbox = mailbox("blambeau@gmail.com")
|
18
|
+
mailbox << mail("This is the first mail")
|
19
|
+
mailbox << mail("This is the second mail")
|
20
|
+
mailbox.size.should == 2
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should allow getting mails" do
|
24
|
+
mailbox = mailbox("blambeau@gmail.com")
|
25
|
+
mailbox << mail("This is the first mail")
|
26
|
+
mailbox << mail("This is the second mail")
|
27
|
+
mailbox[0].subject.should == "This is the first mail"
|
28
|
+
mailbox[1].subject.should == "This is the second mail"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should allow reading mails" do
|
32
|
+
mailbox = mailbox("blambeau@gmail.com")
|
33
|
+
mailbox << mail("This is the first mail")
|
34
|
+
mailbox.is_read?(0).should be_false
|
35
|
+
(mail = mailbox.read(0)).should_not be_nil
|
36
|
+
mail.subject.should == "This is the first mail"
|
37
|
+
mailbox.is_read?(0).should be_true
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should allow clearing the mailbox" do
|
41
|
+
mailbox = mailbox("blambeau@gmail.com")
|
42
|
+
mailbox << mail("This is the first mail")
|
43
|
+
mailbox << mail("This is the second mail")
|
44
|
+
mailbox.size.should == 2
|
45
|
+
mailbox.clear
|
46
|
+
mailbox.size.should == 0
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should be robust to unexistant mails" do
|
50
|
+
mailbox = mailbox("blambeau@gmail.com")
|
51
|
+
mailbox[0].should be_nil
|
52
|
+
mailbox[-1].should be_nil
|
53
|
+
mailbox.is_read?(0).should be_nil
|
54
|
+
mailbox.read(0).should be_nil
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'waw'
|
2
|
+
require 'waw/tools/mail'
|
3
|
+
|
4
|
+
describe ::Waw::Tools::MailAgent::Template do
|
5
|
+
|
6
|
+
def template(*args)
|
7
|
+
::Waw::Tools::MailAgent::Template.new(*args)
|
8
|
+
end
|
9
|
+
|
10
|
+
it("should act as a mail for the construction") {
|
11
|
+
template = template("${subject}", "${body}", "from")
|
12
|
+
template.subject.should == "${subject}"
|
13
|
+
template.body.should == "${body}"
|
14
|
+
template.from.should == "from"
|
15
|
+
}
|
16
|
+
|
17
|
+
it("should detect wlang dialect from content-type") {
|
18
|
+
template = template("${subject}", "${body}", "from")
|
19
|
+
template.dialect.should == "wlang/active-string"
|
20
|
+
template.content_type = "text/html"
|
21
|
+
template.dialect.should == "wlang/xhtml"
|
22
|
+
}
|
23
|
+
|
24
|
+
it("should support easy to_mail instantiation") {
|
25
|
+
template = template("Here is the: ${subject}", "Here is the: ${body}", "from", "receiver1", "receiver2")
|
26
|
+
mail = template.to_mail(:subject => "The subject", :body => "The body")
|
27
|
+
|
28
|
+
# the template has not changed
|
29
|
+
template.subject.should == "Here is the: ${subject}"
|
30
|
+
template.body.should == "Here is the: ${body}"
|
31
|
+
template.to.should == ["receiver1", "receiver2"]
|
32
|
+
|
33
|
+
# the mail should be instantiated
|
34
|
+
mail.from.should == "from"
|
35
|
+
mail.subject.should == "Here is the: The subject"
|
36
|
+
mail.body.should == "Here is the: The body"
|
37
|
+
mail.to.should == ["receiver1", "receiver2"]
|
38
|
+
}
|
39
|
+
|
40
|
+
it("should ensure than to_mail returns something really detached from the template") {
|
41
|
+
template = template("Here is the: ${subject}", "Here is the: ${body}", "from", "receiver1", "receiver2")
|
42
|
+
mail = template.to_mail(:subject => "The subject", :body => "The body")
|
43
|
+
mail.to.clear
|
44
|
+
template.to.should == ["receiver1", "receiver2"]
|
45
|
+
}
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'waw'
|
2
|
+
describe ::Waw::Validation::ArrayValidations do
|
3
|
+
|
4
|
+
it "should be correctly installed" do
|
5
|
+
Waw::Validation.array.should == Waw::Validation::ArrayValidations
|
6
|
+
Waw::Validation.array[Integer].should_not be_nil
|
7
|
+
Waw::Validation.array[Integer].is_a?(Waw::Validation::Validator).should be_true
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should be autorized in a signature" do
|
11
|
+
signature = Waw::Validation.signature {
|
12
|
+
validation :id, array[Integer], :bad_array
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should be correctly block or allow data" do
|
17
|
+
signature = Waw::Validation.signature {
|
18
|
+
validation :id, array[Integer], :bad_array
|
19
|
+
}
|
20
|
+
signature.allows?(:id => nil).should be_false
|
21
|
+
signature.allows?(:id => 1).should be_false
|
22
|
+
signature.allows?(:id => []).should be_true
|
23
|
+
signature.allows?(:id => [1, 2]).should be_true
|
24
|
+
signature.allows?(:id => ["1", "2"]).should be_true
|
25
|
+
signature.allows?(:id => ["1", "hello"]).should be_false
|
26
|
+
signature.allows?(:id => ["1", nil]).should be_false
|
27
|
+
signature.allows?(:id => ["1", ""]).should be_false
|
28
|
+
|
29
|
+
signature = Waw::Validation.signature {
|
30
|
+
validation :id, array[String], :bad_array
|
31
|
+
}
|
32
|
+
signature.allows?(:id => []).should be_true
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should get converted sub values" do
|
36
|
+
signature = Waw::Validation.signature {
|
37
|
+
validation :id, array[Integer], :bad_array
|
38
|
+
}
|
39
|
+
signature.first_converted(:id => [1]).should == [1]
|
40
|
+
signature.first_converted(:id => ["1"]).should == [1]
|
41
|
+
signature.first_converted(:id => ["1", "2"]).should == [1, 2]
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should allow complex validators" do
|
45
|
+
signature = Waw::Validation.signature {
|
46
|
+
validation :id, array[Integer | missing], :bad_array
|
47
|
+
}
|
48
|
+
signature.allows?(:id => nil).should be_false
|
49
|
+
signature.allows?(:id => ["1", "2"]).should be_true
|
50
|
+
signature.allows?(:id => ["1", nil]).should be_true
|
51
|
+
signature.allows?(:id => ["1", ""]).should be_true
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should remove missing values" do
|
55
|
+
signature = Waw::Validation.signature {
|
56
|
+
validation :id, array[Integer | missing], :bad_array
|
57
|
+
}
|
58
|
+
signature.first_converted(:id => ["1", nil]).should == [1]
|
59
|
+
signature.first_converted(:id => ["1", ""]).should == [1]
|
60
|
+
signature.first_converted(:id => ["1", "", nil, "12", " "]).should == [1, 12]
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|