Commit 8421efc3 authored by Luc Didry's avatar Luc Didry
Browse files

Fix #9 Add functional tests

This commit is dedicated to Schoumi, who is supporting me on Tipeee.
Many thanks :-)
parent e0f8ddec
......@@ -22,7 +22,10 @@ podcheck:
test-sqlite:
MOJO_CONFIG=t/sqlite.conf $(CARTON) $(REAL_LUTIM) test
test: podcheck test-sqlite
test-pg:
MOJO_CONFIG=t/postgresql.conf $(CARTON) $(REAL_LUTIM) test
test: podcheck test-sqlite test-pg
clean:
rm -rf lutim.db files/
......@@ -33,3 +36,18 @@ dev:
devlog:
multitail log/development.log
create-pg-test-db:
sudo -u postgres psql -f t/create-pg-testdb.sql
stats:
$(CARTON) $(LUTIM) cron stats -m production
watch:
$(CARTON) $(LUTIM) cron watch -m production
cleanfiles:
$(CARTON) $(LUTIM) cron cleanfiles -m production
cleanbdd:
$(CARTON) $(LUTIM) cron cleanbdd -m production
# vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
package Lutim::Command::cron::cleanbdd;
use Mojo::Base 'Mojolicious::Command';
use Lutim::DB::Image;
use Mojo::File;
use Lutim::DB::Image;
use FindBin qw($Bin);
use File::Spec qw(catfile);
......
# vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
package Lutim::Command::cron::cleanfiles;
use Mojo::Base 'Mojolicious::Command';
use Mojo::Util qw(slurp decode);
use Mojo::File;
use Lutim::DB::Image;
use Lutim;
use Mojo::File;
use FindBin qw($Bin);
use File::Spec qw(catfile);
......
# vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
package Lutim::Command::cron::stats;
use Mojo::Base 'Mojolicious::Command';
use Lutim::DB::Image;
use Mojo::DOM;
use Mojo::Util qw(encode);
use Mojo::File;
use Lutim::DB::Image;
use DateTime;
use FindBin qw($Bin);
use File::Spec qw(catfile);
......
# vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
package Lutim::Command::cron::watch;
use Mojo::Base 'Mojolicious::Command';
use Mojo::Util qw(slurp decode);
use Filesys::DiskUsage qw/du/;
use Lutim::DB::Image;
use Lutim;
......
......@@ -46,8 +46,7 @@ sub select_created_after {
sub {
my ($e, $num) = @_;
my $i = Lutim::DB::Image->new(app => $c->app);
$i->record(1);
$i->_slurp;
$i->_slurp($e);
push @images, $i;
}
......@@ -61,8 +60,7 @@ sub select_empty {
my $record = $c->app->pg->db->query('SELECT * FROM lutim WHERE path IS NULL LIMIT 1')->hashes->first;
$c->record(1);
$c = $c->_slurp;
$c = $c->_slurp($record);
return $c;
}
......@@ -84,7 +82,7 @@ sub count_short {
my $c = shift;
my $short = shift;
return $c->app->pg->db->query('SELECT count(short) FROM lutim WHERE short IS ?', $short)->hashes->first->{count};
return $c->app->pg->db->query('SELECT count(short) FROM lutim WHERE short = ?', $short)->hashes->first->{count};
}
sub count_empty {
......@@ -121,7 +119,7 @@ sub get_no_longer_viewed_files {
my ($e, $num) = @_;
my $i = Lutim::DB::Image->new(app => $c->app);
$i->record(1);
$i->_slurp;
$i->_slurp($e);
push @images, $i;
}
......@@ -141,8 +139,7 @@ sub get_images_to_clean {
sub {
my ($e, $num) = @_;
my $i = Lutim::DB::Image->new(app => $c->app);
$i->record(1);
$i->_slurp;
$i->_slurp($e);
push @images, $i;
}
......@@ -162,8 +159,7 @@ sub get_50_oldest {
sub {
my ($e, $num) = @_;
my $i = Lutim::DB::Image->new(app => $c->app);
$i->record(1);
$i->_slurp;
$i->_slurp($e);
push @images, $i;
}
......@@ -183,12 +179,20 @@ sub disable {
sub _slurp {
my $c = shift;
my $r = shift;
my $images = $c->app->pg->db->query('SELECT * FROM lutim WHERE short = ?', $c->short)->hashes;
my $image;
if (defined $r) {
$image = $r;
} else {
my $images = $c->app->pg->db->query('SELECT * FROM lutim WHERE short = ?', $c->short)->hashes;
if ($images->size) {
my $image = $images->first;
if ($images->size) {
$image = $images->first;
}
}
if ($image) {
$c->short($image->{short});
$c->path($image->{path});
$c->footprint($image->{footprint});
......
......@@ -217,23 +217,25 @@ sub _slurp {
}
if (scalar @images) {
$c->short($images[0]->short);
$c->path($images[0]->path);
$c->footprint($images[0]->footprint);
$c->enabled($images[0]->enabled);
$c->mediatype($images[0]->mediatype);
$c->filename($images[0]->filename);
$c->counter($images[0]->counter);
$c->delete_at_first_view($images[0]->delete_at_first_view);
$c->delete_at_day($images[0]->delete_at_day);
$c->created_at($images[0]->created_at);
$c->created_by($images[0]->created_by);
$c->last_access_at($images[0]->last_access_at);
$c->mod_token($images[0]->mod_token);
$c->width($images[0]->width);
$c->height($images[0]->height);
$c->record($images[0]) unless $c->record;
my $image = $images[0];
$c->short($image->short);
$c->path($image->path);
$c->footprint($image->footprint);
$c->enabled($image->enabled);
$c->mediatype($image->mediatype);
$c->filename($image->filename);
$c->counter($image->counter);
$c->delete_at_first_view($image->delete_at_first_view);
$c->delete_at_day($image->delete_at_day);
$c->created_at($image->created_at);
$c->created_by($image->created_by);
$c->last_access_at($image->last_access_at);
$c->mod_token($image->mod_token);
$c->width($image->width);
$c->height($image->height);
$c->record($image) unless $c->record;
}
return $c;
......
......@@ -28,6 +28,8 @@ sub startup {
}
);
$self->plugin('Lutim::Plugin::Helpers');
$config->{prefix} = $config->{url_sub_dir} if (defined($config->{url_sub_dir}) && $config->{prefix} eq '/');
$self->app->log->warn('"url_sub_dir" configuration option is deprecated. Use "prefix" instead. "url_sub_dir" will be removed in the future') if (defined($config->{url_sub_dir}));
......
CREATE USER lutim WITH PASSWORD 'lutim';
CREATE DATABASE lutimtest OWNER lutim;
# vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
{
####################
# Hypnotoad settings
####################
# see http://mojolicio.us/perldoc/Mojo/Server/Hypnotoad for a full list of settings
hypnotoad => {
# array of IP addresses and ports you want to listen to
listen => ['http://127.0.0.1:8080'],
# if you use Lutim behind a reverse proxy like Nginx, you want to set proxy to 1
# if you use Lutim directly, let it commented
#proxy => 1,
},
################
# Lutim settings
################
# put a way to contact you here and uncomment it
# mandatory
contact => 'John Doe, admin[at]example.com',
# random string used to encrypt cookies
# mandatory
secrets => ['fdjsofjoihrei'],
# choose a theme. See the available themes in `themes` directory
# optional, default is 'default'
#theme => 'default',
# length of the images random URL
# optional, default is 8
#length => 8,
# length of the encryption key
# optional, default is 8
#crypto_key_length => 8,
# how many URLs will be provisioned in a batch ?
# optional, default is 5
#provis_step => 5,
# max number of URLs to be provisioned
# optional, default is 100
#provisioning => 100,
# anti-flood protection delay, in seconds
# users won't be able to ask Lutim to download images more than one per anti_flood_delay seconds
# optional, default is 5
#anti_flood_delay => 5,
# twitter account which will appear on twitter cards
# see https://dev.twitter.com/docs/cards/validation/validator to register your Lutim instance on twitter
# optional, default is @framasky
#tweet_card_via => '@framasky',
# max image size, in octets
# you can write it 10*1024*1024
# optional, default is 10485760
max_file_size => 1048576,
# if you want to have piwik statistics, provide a piwik image tracker
# only the image tracker is allowed, no javascript
# optional, no default
#piwik_img => 'https://piwik.example.org/piwik.php?idsite=1&rec=1',
# if you want to include something in the right of the screen, put it here
# here's an example to put the logo of your hoster
# optional, no default
#hosted_by => 'My super hoster <img src="http://hoster.example.com" alt="Hoster logo">',
# DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED
# Lutim now checks if the X-Forwarded-Proto header is present and equal to https.
# set to 1 if you use Lutim behind a secure web server
# optional, default is 0
#https => 0,
# broadcast_message which will displayed on all pages of Lutim (but no in json response)
# optional, no default
broadcast_message => 'test broadcast message',
# array of authorized domains for API calls.
# if you want to authorize everyone to use the API: ['*']
# optional, no domains allowed by default
#allowed_domains => ['http://1.example.com', 'http://2.example.com'],
# default time limit for files
# valid values are 0, 1, 7, 30 and 365
# optional, default is 0 (no limit)
default_delay => 30,
# number of days after which the images will be deleted, even if they were uploaded with "no delay" (or value superior to max_delay)
# a warning message will be displayed on homepage
# optional, default is 0 (no limit)
max_delay => 200,
# if set to 1, all the images will be encrypted and the encryption option will no be displayed
# optional, default is 0
#always_encrypt => 0,
# length of the image's delete token
# optional, default is 24
#token_length => 24,
# URL sub-directory in which you want Lutim to be accessible
# example: you want to have Lutim under https://example.org/lutim/
# => set prefix to '/lutim' or to '/lutim/', it doesn't matter
# optional, defaut is /
#prefix => '/',
# choose what database you want to use
# valid choices are sqlite and postgresql (all lowercase)
# optional, default is sqlite
dbtype => 'postgresql',
# SQLite ONLY - only used if dbtype is set to sqlite
# define a path to the SQLite database
# you can define it relative to lutim directory or set an absolute path
# remember that it has to be in a directory writable by Lutim user
# optional, default is lutim.db
#db_path => 'lutim.db',
# PostgreSQL ONLY - only used if dbtype is set to postgresql
# these are the credentials to access the PostgreSQL database
# mandatory if you choosed postgresql as dbtype
pgdb => {
database => 'lutimtest',
host => 'localhost',
user => 'lutim',
pwd => 'lutim'
},
# define the height of the thumbnails generated at users' will
# this is not the height of the thumbnails send after upload,
# we're talking about thumbnails generated when someone asked for
# https://example.org/lutim/tesrinp?thumb
# this works only if you have ImageMagick
# optional, default is 100 (pixels)
#thumbnail_size => 100,
##########################
# Lutim cron jobs settings
##########################
# number of days shown in /stats page (used with script/lutim cron stats)
# optional, default is 365
#stats_day_num => 365,
# number of days senders' IP addresses are kept in database
# after that delay, they will be deleted from database (used with script/lutim cron cleanbdd)
# optional, default is 365
#keep_ip_during => 365,
# max size of the files directory, in octets
# used by script/lutim cron watch to trigger an action
# optional, no default
#max_total_size => 10*1024*1024*1024,
# default action when files directory is over max_total_size (used with script/lutim cron watch)
# valid values are 'warn', 'stop-upload' and 'delete'
# please, see readme
# optional, default is 'warn'
#policy_when_full => 'warn',
# images which are not viewed since delete_no_longer_viewed_files days will be deleted by the cron cleanfiles task
# if delete_no_longer_viewed_files is not set, the no longer viewed files will NOT be deleted
# optional, no default
#delete_no_longer_viewed_files => 90
};
-- 1 up
CREATE TABLE IF NOT EXISTS lutim (
short text PRIMARY KEY,
path text,
footprint text,
path text default null,
footprint text default null,
enabled integer,
mediatype text,
filename text,
mediatype text default null,
filename text default null,
counter integer default 0,
delete_at_first_view integer,
delete_at_day integer,
created_at integer,
created_by text,
last_access_at integer,
mod_token text,
width integer,
height integer)'
delete_at_first_view integer default null,
delete_at_day integer default null,
created_at integer default null,
created_by text default null,
last_access_at integer default null,
mod_token text default null,
width integer default null,
height integer default null
);
-- 1 down
DROP TABLE lutim;
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment