mirror of
https://github.com/hkalexling/Mango.git
synced 2026-04-25 00:00:52 -04:00
Project-wise code formatting
This commit is contained in:
+9
-9
@@ -1,14 +1,14 @@
|
||||
require "./spec_helper"
|
||||
|
||||
describe Config do
|
||||
it "creates config if it does not exist" do
|
||||
with_default_config do |config, logger, path|
|
||||
File.exists?(path).should be_true
|
||||
end
|
||||
end
|
||||
it "creates config if it does not exist" do
|
||||
with_default_config do |config, logger, path|
|
||||
File.exists?(path).should be_true
|
||||
end
|
||||
end
|
||||
|
||||
it "correctly loads config" do
|
||||
config = Config.load "spec/asset/test-config.yml"
|
||||
config.port.should eq 3000
|
||||
end
|
||||
it "correctly loads config" do
|
||||
config = Config.load "spec/asset/test-config.yml"
|
||||
config.port.should eq 3000
|
||||
end
|
||||
end
|
||||
|
||||
+88
-89
@@ -3,103 +3,102 @@ require "./spec_helper"
|
||||
include MangaDex
|
||||
|
||||
describe Queue do
|
||||
it "creates DB at given path" do
|
||||
with_queue do |queue, path|
|
||||
File.exists?(path).should be_true
|
||||
end
|
||||
end
|
||||
it "creates DB at given path" do
|
||||
with_queue do |queue, path|
|
||||
File.exists?(path).should be_true
|
||||
end
|
||||
end
|
||||
|
||||
it "pops nil when empty" do
|
||||
with_queue do |queue|
|
||||
queue.pop.should be_nil
|
||||
end
|
||||
end
|
||||
it "pops nil when empty" do
|
||||
with_queue do |queue|
|
||||
queue.pop.should be_nil
|
||||
end
|
||||
end
|
||||
|
||||
it "inserts multiple jobs" do
|
||||
with_queue do |queue|
|
||||
j1 = Job.new "1", "1", "title", "manga_title", JobStatus::Error,
|
||||
Time.utc
|
||||
j2 = Job.new "2", "2", "title", "manga_title", JobStatus::Completed,
|
||||
Time.utc
|
||||
j3 = Job.new "3", "3", "title", "manga_title", JobStatus::Pending,
|
||||
Time.utc
|
||||
j4 = Job.new "4", "4", "title", "manga_title",
|
||||
JobStatus::Downloading, Time.utc
|
||||
count = queue.push [j1, j2, j3, j4]
|
||||
count.should eq 4
|
||||
end
|
||||
end
|
||||
it "inserts multiple jobs" do
|
||||
with_queue do |queue|
|
||||
j1 = Job.new "1", "1", "title", "manga_title", JobStatus::Error,
|
||||
Time.utc
|
||||
j2 = Job.new "2", "2", "title", "manga_title", JobStatus::Completed,
|
||||
Time.utc
|
||||
j3 = Job.new "3", "3", "title", "manga_title", JobStatus::Pending,
|
||||
Time.utc
|
||||
j4 = Job.new "4", "4", "title", "manga_title",
|
||||
JobStatus::Downloading, Time.utc
|
||||
count = queue.push [j1, j2, j3, j4]
|
||||
count.should eq 4
|
||||
end
|
||||
end
|
||||
|
||||
it "pops pending job" do
|
||||
with_queue do |queue|
|
||||
job = queue.pop
|
||||
job.should_not be_nil
|
||||
job.not_nil!.id.should eq "3"
|
||||
end
|
||||
end
|
||||
it "pops pending job" do
|
||||
with_queue do |queue|
|
||||
job = queue.pop
|
||||
job.should_not be_nil
|
||||
job.not_nil!.id.should eq "3"
|
||||
end
|
||||
end
|
||||
|
||||
it "correctly counts jobs" do
|
||||
with_queue do |queue|
|
||||
queue.count.should eq 4
|
||||
end
|
||||
end
|
||||
it "correctly counts jobs" do
|
||||
with_queue do |queue|
|
||||
queue.count.should eq 4
|
||||
end
|
||||
end
|
||||
|
||||
it "deletes job" do
|
||||
with_queue do |queue|
|
||||
queue.delete "4"
|
||||
queue.count.should eq 3
|
||||
end
|
||||
end
|
||||
it "deletes job" do
|
||||
with_queue do |queue|
|
||||
queue.delete "4"
|
||||
queue.count.should eq 3
|
||||
end
|
||||
end
|
||||
|
||||
it "sets status" do
|
||||
with_queue do |queue|
|
||||
job = queue.pop.not_nil!
|
||||
queue.set_status JobStatus::Downloading, job
|
||||
job = queue.pop
|
||||
job.should_not be_nil
|
||||
job.not_nil!.status.should eq JobStatus::Downloading
|
||||
end
|
||||
end
|
||||
it "sets status" do
|
||||
with_queue do |queue|
|
||||
job = queue.pop.not_nil!
|
||||
queue.set_status JobStatus::Downloading, job
|
||||
job = queue.pop
|
||||
job.should_not be_nil
|
||||
job.not_nil!.status.should eq JobStatus::Downloading
|
||||
end
|
||||
end
|
||||
|
||||
it "sets number of pages" do
|
||||
with_queue do |queue|
|
||||
job = queue.pop.not_nil!
|
||||
queue.set_pages 100, job
|
||||
job = queue.pop
|
||||
job.should_not be_nil
|
||||
job.not_nil!.pages.should eq 100
|
||||
end
|
||||
end
|
||||
it "sets number of pages" do
|
||||
with_queue do |queue|
|
||||
job = queue.pop.not_nil!
|
||||
queue.set_pages 100, job
|
||||
job = queue.pop
|
||||
job.should_not be_nil
|
||||
job.not_nil!.pages.should eq 100
|
||||
end
|
||||
end
|
||||
|
||||
it "adds fail/success counts" do
|
||||
with_queue do |queue|
|
||||
job = queue.pop.not_nil!
|
||||
queue.add_success job
|
||||
queue.add_success job
|
||||
queue.add_fail job
|
||||
job = queue.pop
|
||||
job.should_not be_nil
|
||||
job.not_nil!.success_count.should eq 2
|
||||
job.not_nil!.fail_count.should eq 1
|
||||
end
|
||||
end
|
||||
it "adds fail/success counts" do
|
||||
with_queue do |queue|
|
||||
job = queue.pop.not_nil!
|
||||
queue.add_success job
|
||||
queue.add_success job
|
||||
queue.add_fail job
|
||||
job = queue.pop
|
||||
job.should_not be_nil
|
||||
job.not_nil!.success_count.should eq 2
|
||||
job.not_nil!.fail_count.should eq 1
|
||||
end
|
||||
end
|
||||
|
||||
it "appends status message" do
|
||||
with_queue do |queue|
|
||||
job = queue.pop.not_nil!
|
||||
queue.add_message "hello", job
|
||||
queue.add_message "world", job
|
||||
job = queue.pop
|
||||
job.should_not be_nil
|
||||
job.not_nil!.status_message.should eq "\nhello\nworld"
|
||||
end
|
||||
end
|
||||
it "appends status message" do
|
||||
with_queue do |queue|
|
||||
job = queue.pop.not_nil!
|
||||
queue.add_message "hello", job
|
||||
queue.add_message "world", job
|
||||
job = queue.pop
|
||||
job.should_not be_nil
|
||||
job.not_nil!.status_message.should eq "\nhello\nworld"
|
||||
end
|
||||
end
|
||||
|
||||
it "cleans up" do
|
||||
with_queue do
|
||||
true
|
||||
end
|
||||
State.reset
|
||||
end
|
||||
it "cleans up" do
|
||||
with_queue do
|
||||
true
|
||||
end
|
||||
State.reset
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
+43
-43
@@ -3,63 +3,63 @@ require "../src/context"
|
||||
require "../src/server"
|
||||
|
||||
class State
|
||||
@@hash = {} of String => String
|
||||
@@hash = {} of String => String
|
||||
|
||||
def self.get(key)
|
||||
@@hash[key]?
|
||||
end
|
||||
def self.get(key)
|
||||
@@hash[key]?
|
||||
end
|
||||
|
||||
def self.get!(key)
|
||||
@@hash[key]
|
||||
end
|
||||
def self.get!(key)
|
||||
@@hash[key]
|
||||
end
|
||||
|
||||
def self.set(key, value)
|
||||
return if value.nil?
|
||||
@@hash[key] = value
|
||||
end
|
||||
def self.set(key, value)
|
||||
return if value.nil?
|
||||
@@hash[key] = value
|
||||
end
|
||||
|
||||
def self.reset
|
||||
@@hash.clear
|
||||
end
|
||||
def self.reset
|
||||
@@hash.clear
|
||||
end
|
||||
end
|
||||
|
||||
def get_tempfile(name)
|
||||
path = State.get name
|
||||
if path.nil? || !File.exists? path
|
||||
file = File.tempfile name
|
||||
State.set name, file.path
|
||||
return file
|
||||
else
|
||||
return File.new path
|
||||
end
|
||||
path = State.get name
|
||||
if path.nil? || !File.exists? path
|
||||
file = File.tempfile name
|
||||
State.set name, file.path
|
||||
return file
|
||||
else
|
||||
return File.new path
|
||||
end
|
||||
end
|
||||
|
||||
def with_default_config
|
||||
temp_config = get_tempfile "mango-test-config"
|
||||
config = Config.load temp_config.path
|
||||
logger = Logger.new config.log_level
|
||||
yield config, logger, temp_config.path
|
||||
temp_config.delete
|
||||
temp_config = get_tempfile "mango-test-config"
|
||||
config = Config.load temp_config.path
|
||||
logger = Logger.new config.log_level
|
||||
yield config, logger, temp_config.path
|
||||
temp_config.delete
|
||||
end
|
||||
|
||||
def with_storage
|
||||
with_default_config do |config, logger|
|
||||
temp_db = get_tempfile "mango-test-db"
|
||||
storage = Storage.new temp_db.path, logger
|
||||
clear = yield storage, temp_db.path
|
||||
if clear == true
|
||||
temp_db.delete
|
||||
end
|
||||
end
|
||||
with_default_config do |config, logger|
|
||||
temp_db = get_tempfile "mango-test-db"
|
||||
storage = Storage.new temp_db.path, logger
|
||||
clear = yield storage, temp_db.path
|
||||
if clear == true
|
||||
temp_db.delete
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def with_queue
|
||||
with_default_config do |config, logger|
|
||||
temp_queue_db = get_tempfile "mango-test-queue-db"
|
||||
queue = MangaDex::Queue.new temp_queue_db.path, logger
|
||||
clear = yield queue, temp_queue_db.path
|
||||
if clear == true
|
||||
temp_queue_db.delete
|
||||
end
|
||||
end
|
||||
with_default_config do |config, logger|
|
||||
temp_queue_db = get_tempfile "mango-test-queue-db"
|
||||
queue = MangaDex::Queue.new temp_queue_db.path, logger
|
||||
clear = yield queue, temp_queue_db.path
|
||||
if clear == true
|
||||
temp_queue_db.delete
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
+77
-77
@@ -1,91 +1,91 @@
|
||||
require "./spec_helper"
|
||||
|
||||
describe Storage do
|
||||
it "creates DB at given path" do
|
||||
with_storage do |storage, path|
|
||||
File.exists?(path).should be_true
|
||||
end
|
||||
end
|
||||
it "creates DB at given path" do
|
||||
with_storage do |storage, path|
|
||||
File.exists?(path).should be_true
|
||||
end
|
||||
end
|
||||
|
||||
it "deletes user" do
|
||||
with_storage do |storage|
|
||||
storage.delete_user "admin"
|
||||
end
|
||||
end
|
||||
it "deletes user" do
|
||||
with_storage do |storage|
|
||||
storage.delete_user "admin"
|
||||
end
|
||||
end
|
||||
|
||||
it "creates new user" do
|
||||
with_storage do |storage|
|
||||
storage.new_user "user", "123456", false
|
||||
storage.new_user "admin", "123456", true
|
||||
end
|
||||
end
|
||||
it "creates new user" do
|
||||
with_storage do |storage|
|
||||
storage.new_user "user", "123456", false
|
||||
storage.new_user "admin", "123456", true
|
||||
end
|
||||
end
|
||||
|
||||
it "verifies username/password combination" do
|
||||
with_storage do |storage|
|
||||
user_token = storage.verify_user "user", "123456"
|
||||
admin_token = storage.verify_user "admin", "123456"
|
||||
user_token.should_not be_nil
|
||||
admin_token.should_not be_nil
|
||||
State.set "user_token", user_token
|
||||
State.set "admin_token", admin_token
|
||||
end
|
||||
end
|
||||
it "verifies username/password combination" do
|
||||
with_storage do |storage|
|
||||
user_token = storage.verify_user "user", "123456"
|
||||
admin_token = storage.verify_user "admin", "123456"
|
||||
user_token.should_not be_nil
|
||||
admin_token.should_not be_nil
|
||||
State.set "user_token", user_token
|
||||
State.set "admin_token", admin_token
|
||||
end
|
||||
end
|
||||
|
||||
it "rejects duplicate username" do
|
||||
with_storage do |storage|
|
||||
expect_raises SQLite3::Exception,
|
||||
"UNIQUE constraint failed: users.username" do
|
||||
storage.new_user "admin", "123456", true
|
||||
end
|
||||
end
|
||||
end
|
||||
it "rejects duplicate username" do
|
||||
with_storage do |storage|
|
||||
expect_raises SQLite3::Exception,
|
||||
"UNIQUE constraint failed: users.username" do
|
||||
storage.new_user "admin", "123456", true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
it "verifies token" do
|
||||
with_storage do |storage|
|
||||
user_token = State.get! "user_token"
|
||||
user = storage.verify_token user_token
|
||||
user.should eq "user"
|
||||
end
|
||||
end
|
||||
it "verifies token" do
|
||||
with_storage do |storage|
|
||||
user_token = State.get! "user_token"
|
||||
user = storage.verify_token user_token
|
||||
user.should eq "user"
|
||||
end
|
||||
end
|
||||
|
||||
it "verfies admin token" do
|
||||
with_storage do |storage|
|
||||
admin_token = State.get! "admin_token"
|
||||
storage.verify_admin(admin_token).should be_true
|
||||
end
|
||||
end
|
||||
it "verfies admin token" do
|
||||
with_storage do |storage|
|
||||
admin_token = State.get! "admin_token"
|
||||
storage.verify_admin(admin_token).should be_true
|
||||
end
|
||||
end
|
||||
|
||||
it "rejects non-admin token" do
|
||||
with_storage do |storage|
|
||||
user_token = State.get! "user_token"
|
||||
storage.verify_admin(user_token).should be_false
|
||||
end
|
||||
end
|
||||
it "rejects non-admin token" do
|
||||
with_storage do |storage|
|
||||
user_token = State.get! "user_token"
|
||||
storage.verify_admin(user_token).should be_false
|
||||
end
|
||||
end
|
||||
|
||||
it "updates user" do
|
||||
with_storage do |storage|
|
||||
storage.update_user "admin", "admin", "654321", true
|
||||
token = storage.verify_user "admin", "654321"
|
||||
admin_token = State.get! "admin_token"
|
||||
token.should eq admin_token
|
||||
end
|
||||
end
|
||||
it "updates user" do
|
||||
with_storage do |storage|
|
||||
storage.update_user "admin", "admin", "654321", true
|
||||
token = storage.verify_user "admin", "654321"
|
||||
admin_token = State.get! "admin_token"
|
||||
token.should eq admin_token
|
||||
end
|
||||
end
|
||||
|
||||
it "logs user out" do
|
||||
with_storage do |storage|
|
||||
user_token = State.get! "user_token"
|
||||
admin_token = State.get! "admin_token"
|
||||
storage.logout user_token
|
||||
storage.logout admin_token
|
||||
storage.verify_token(user_token).should be_nil
|
||||
storage.verify_token(admin_token).should be_nil
|
||||
end
|
||||
end
|
||||
it "logs user out" do
|
||||
with_storage do |storage|
|
||||
user_token = State.get! "user_token"
|
||||
admin_token = State.get! "admin_token"
|
||||
storage.logout user_token
|
||||
storage.logout admin_token
|
||||
storage.verify_token(user_token).should be_nil
|
||||
storage.verify_token(admin_token).should be_nil
|
||||
end
|
||||
end
|
||||
|
||||
it "cleans up" do
|
||||
with_storage do
|
||||
true
|
||||
end
|
||||
State.reset
|
||||
end
|
||||
it "cleans up" do
|
||||
with_storage do
|
||||
true
|
||||
end
|
||||
State.reset
|
||||
end
|
||||
end
|
||||
|
||||
+29
-29
@@ -1,36 +1,36 @@
|
||||
require "./spec_helper"
|
||||
|
||||
describe "compare_alphanumerically" do
|
||||
it "sorts filenames with leading zeros correctly" do
|
||||
ary = ["010.jpg", "001.jpg", "002.png"]
|
||||
ary.sort! {|a, b|
|
||||
compare_alphanumerically a, b
|
||||
}
|
||||
ary.should eq ["001.jpg", "002.png", "010.jpg"]
|
||||
end
|
||||
it "sorts filenames with leading zeros correctly" do
|
||||
ary = ["010.jpg", "001.jpg", "002.png"]
|
||||
ary.sort! { |a, b|
|
||||
compare_alphanumerically a, b
|
||||
}
|
||||
ary.should eq ["001.jpg", "002.png", "010.jpg"]
|
||||
end
|
||||
|
||||
it "sorts filenames without leading zeros correctly" do
|
||||
ary = ["10.jpg", "1.jpg", "0.png", "0100.jpg"]
|
||||
ary.sort! {|a, b|
|
||||
compare_alphanumerically a, b
|
||||
}
|
||||
ary.should eq ["0.png", "1.jpg", "10.jpg", "0100.jpg"]
|
||||
end
|
||||
it "sorts filenames without leading zeros correctly" do
|
||||
ary = ["10.jpg", "1.jpg", "0.png", "0100.jpg"]
|
||||
ary.sort! { |a, b|
|
||||
compare_alphanumerically a, b
|
||||
}
|
||||
ary.should eq ["0.png", "1.jpg", "10.jpg", "0100.jpg"]
|
||||
end
|
||||
|
||||
# https://ux.stackexchange.com/a/95441
|
||||
it "sorts like the stack exchange post" do
|
||||
ary = ["2", "12", "200000", "1000000", "a", "a12", "b2", "text2",
|
||||
"text2a", "text2a2", "text2a12", "text2ab", "text12", "text12a"]
|
||||
ary.reverse.sort {|a, b|
|
||||
compare_alphanumerically a, b
|
||||
}.should eq ary
|
||||
end
|
||||
# https://ux.stackexchange.com/a/95441
|
||||
it "sorts like the stack exchange post" do
|
||||
ary = ["2", "12", "200000", "1000000", "a", "a12", "b2", "text2",
|
||||
"text2a", "text2a2", "text2a12", "text2ab", "text12", "text12a"]
|
||||
ary.reverse.sort { |a, b|
|
||||
compare_alphanumerically a, b
|
||||
}.should eq ary
|
||||
end
|
||||
|
||||
# https://github.com/hkalexling/Mango/issues/22
|
||||
it "handles numbers larger than Int32" do
|
||||
ary = ["14410155591588.jpg", "21410155591588.png", "104410155591588.jpg"]
|
||||
ary.reverse.sort {|a, b|
|
||||
compare_alphanumerically a, b
|
||||
}.should eq ary
|
||||
end
|
||||
# https://github.com/hkalexling/Mango/issues/22
|
||||
it "handles numbers larger than Int32" do
|
||||
ary = ["14410155591588.jpg", "21410155591588.png", "104410155591588.jpg"]
|
||||
ary.reverse.sort { |a, b|
|
||||
compare_alphanumerically a, b
|
||||
}.should eq ary
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user