waw 0.2.2
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/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
|