User:Victor Grousset - tuxayo/Development/Tools and operations
Run automated tests
One or just a few
prove t/db_dependent/Search.t
prove t/db_dependent/Search.t t/db_dependent/selenium/administration_tasks.t
# Cypress tests
cypress run --config video=false --spec t/cypress/integration/ERM/Dialog_spec.ts
cypress run --config video=false --spec "t/cypress/integration/ERM/Dialog_spec.ts,t/cypress/integration/ERM/Agreements_spec.ts"
All tests or all Cypress or all Selenium tests
Continuous_Integration#Run_automated_tests
Auto-rebase script
misc/devel/auto_rebase.pl
This script automates the rebasing of a Git branch onto a target branch that contains the tidy version of the codebase. It rebases up to before the first commit of the tidy commits then applies the commits from the source branch, tidy this version and commits.
Finally the rebase will continue.
The source branch is the branch that is currently checked out.
Demo: https://cloud.joetka.eu/s/SK7BjFRSggLt6fK/download/auto-rebase-2025-01-15_12.51.11.mkv
Interactive Perl shell - REPL (Read–Eval–Print Loop) with Devel::REPL
Install and run
sudo apt install libdevel-repl-perl
re.pl
Usage examples
Connect to the database
my $dbh = DBI->connect('dbi:mysql:;host=db;port=3306', 'koha_kohadev', 'password');
Test number formatting
use Number::Format;
my $format = new Number::Format(-decimal_point => '.');
# $Number_Format1 = Number::Format=HASH(0x39cbf00);
$format->unformat_number("12345,89");
# 12345.89
# Caveat: don't use print if you want to see the value, otherwise you will get some kind of return value of print
$ print $format->unformat_number("12345,89");
# 1
Trigger the installer
echo "DROP DATABASE koha_kohadev; CREATE DATABASE koha_kohadev;" | koha-mysql kohadev ; restart_all
Install translations
update dababase
~/src/installer/data/mysql/updatedatabase.pl
Use yarn in KTD
# example with yarn install
sudo yarn install --modules-folder /kohadevbox/node_modules
Loop to create a lot of data in Perl
perl -MKoha::Database -e '
my $schema = Koha::Database->schema;
my $period = $schema->resultset("Aqbudgetperiod")->create({
budget_period_startdate => "2000-01-01",
budget_period_enddate => "2999-12-31"
});
$schema->resultset("Aqbudget")->create({
budget_owner_id => 1,
budget_period_id => $period->id
}) for (1..1000)
'
Restore backup in KTD (koha-testing-docker)
It's not clean, there are errors when running koha-remove so it's an incomplete removal. That's the best I've found for now.
docker exec -it koha-koha-1 bash
service koha-common stop
service apache2 stop
koha-remove kohadev
cd koha
koha-restore kohadev-2024-03-19.sql.gz kohadev-2024-03-19.tar.gz
restart_all
Reset DB with dump
If you don't have a devbox. Using BibLibre's tools (https://git.biblibre.com/biblibre/tools)
# memcached is flushed because if you switched to another version of the code, the old version will be in cache and the updatedatabase won't run
echo "flush_all" | nc -q 2 localhost 11211 && \
~/tools/sysop/db_replace.sh --confirm --dump ~/dumps/koha-sample.sql.gz && \
~/src/installer/data/mysql/updatedatabase.pl && \
~/tools/zebra/rebuild_full.sh -b -a
Use Elasticsearch
Switch the SearchEngine syspref
Index data
misc/search_tools/rebuild_elasticsearch.pl -v -d
Maybe also
# as root
koha-elasticsearch -v -p 5 --commit 1000 --rebuild kohadev
Test SIP with emulator
https://wiki.koha-community.org/wiki/Koha_SIP2_server_setup#Example
Run an old Koha
# Can go at least to 19.11
sudo apt install libyaml-syck-perl libtext-unaccent-perl libemail-valid-perl libcatmandu-marc-perl libcatmandu-store-elasticsearch-perl libextutils-pkgconfig-perl libwww-curl-perl libcurl4-gnutls-dev
sudo cpanm Search::Elasticsearch::Client::5_0::Direct
# you might need
sudo cpanm -i JSON::Validator::OpenAPI --force
# TODO try
sudo cpanm -i JSON::Validator
# you might need
sudo apt install libdbd-mock-perl
If the container has a too old Debian
# Somehow it needs elasticsearch, here opensearch works fine
KOHA_IMAGE=22.05-stretch bin/ktd --os1 up
# It works with the master branch of KTD repo. After trying,
# older branches don't help to simplify the operation.
# and **while** it's starting go into the container and edit the repositories
vim /etc/apt/sources.list
# replace "httpredir" with "archive" and remove the 2nd line.
# In the end the content should be
```
deb http://archive.debian.org/debian stretch main
```
# otherwise it will 404 when trying to install the cpanoutdated package and crash
Apply large patches without adding a git remote
wget -q -O- http://git.biblibre.com/biblibre/kohac/commit/457524cef965faf96a9516c17e9e0a8bbdec19aa.patch | git am -3 -
Generate test data
Many patrons
base:
SELECT surname, firstname, branchcode, categorycode
FROM
(
SELECT surname
FROM borrowers
ORDER BY rand()
) a,
(
SELECT firstname
FROM borrowers
ORDER BY rand() ) b,
(
SELECT branchcode
FROM borrowers
ORDER BY rand() ) c,
(
SELECT categorycode
FROM borrowers
ORDER BY rand() ) d
LIMIT 50000
Many holds
Thanks Joubu :)
use C4::Reserves;
use Koha::Patrons;
use t::lib::Mocks;
use Koha::DateUtils qw( dt_from_string );
t::lib::Mocks::mock_userenv({branchcode => 'CPL'});
my $items = Koha::Items->search;
my $patron = Koha::Patrons->find(5);
my $i;
while(my $item = $items->next){
say $i++;
next unless $item->barcode;
my $reservation_date = dt_from_string->subtract(days => rand(45));
my $expiration_date = dt_from_string->add(days => rand(45));
C4::Reserves::AddReserve({ branchcode => $patron->branchcode, borrowernumber => $patron->borrowernumber, biblionumber => $item->biblionumber, reservation_date => $reservation_date, expiration_date => $expiration_date, itemnumber => $item->itemnumber });
last if $i > 50;
}
Thanks Kidclamp :)
#! /usr/bin/perl
use t::lib::TestBuilder;
use Koha::Libraries;
use Koha::Holds;
use Koha::Patrons;
use Koha::DateUtils qw(dt_from_string);
my $libraries = Koha::Libraries->search();
my $builder = t::lib::TestBuilder->new();
while( my $library = $libraries->next) {
my $several = int( rand(10) )+10;
for( my $i = 0; $i < $several; $i++ ){
my $holder = Koha::Patrons->search({},{'order_by'=>\"rand()"})->next;
my $biblio = Koha::Biblios->search({},{'order_by'=>\"rand()"})->next;
next unless $biblio;
my $item = $biblio->items->search({},{ order_by => \["rand()"] })->next;
# Below is to set a 50/50 chance of creating an item level versus next available hold
my $itemnumber = $item && int( rand(2) ) ? $item->itemnumber : undef;
my $hold = $builder->build_object({
class => "Koha::Holds",
value => {
borrowernumber => $holder->borrowernumber,
biblionumber => $biblio->biblionumber,
reservedate => dt_from_string(),
branchcode => $library->branchcode,
desk_id => undef,
cancellationdate => undef,
cancellation_reason => undef,
priority => $biblio->holds->count()+1,
found => undef,
itemnumber => $itemnumber,
waitingdate => undef,
expirationdate => undef,
suspend => 0,
suspend_until=>undef,
item_level_hold => $itemnumber ? 1 : 0,
itemtype => undef,
patron_expiration_date => undef,
}
});
}
}
1;
Send emails
Setup email using your own SMTP server.
edit koha-conf.xml to add the following inside the <config> section
<smtp_server>
<host>yourSMTP.example.org</host>
<port>587</port>
<timeout>5</timeout>
<ssl_mode>STARTTLS</ssl_mode>
<user_name>youraddress@example.org</user_name>
<password>yourpassword</password>
<debug>1</debug>
</smtp_server>
A set KohaAdminEmailAddress to your address.
Test the REST API
$.ajax({
url: '/api/v1/biblios/55/items/117',
method: 'PUT',
data: JSON.stringify({
"collection_code": "COLLECTION1",
"external_id": "123test",
}),
contentType: 'application/json',
success: function(result) {
console.log('altered')
},
});
Switch Starman to deployment/production environment
To see the production error pages for example.
sudo vim /usr/sbin/koha-plack
See this section
if [ "$DEV_INSTALL" = "1" ]; then
# Maybe we should switch off debug_mode if DEV_INSTALL is not set?
environment="development"
fi
Replace "development" by "deployment"