Merge branch 'master' into ci3

This commit is contained in:
FrancescoUK
2016-01-28 09:05:35 +00:00
10 changed files with 105 additions and 63 deletions

View File

@@ -1,17 +1,14 @@
sudo: required
sudo: false
language: node_js
node_js:
- 0.10
services:
- docker
before_install:
- docker build -t jekkos/opensourcepos .
- docker run -d jekkos/opensourcepos /bin/sh -c "cd /app; npm install"
- docker ps -a
- docker run -d -p 127.0.0.1:80:80 jekkos/opensourcepos
- sleep 4
script:
- docker run -d -p 127.0.0.1:80:80 jekkos/opensourcepos /bin/sh -c "cd /app; grunt mochaWebdriver:test"
- docker exec -t -i $(docker ps | tail -n 1 | cut -d' ' -f1) /bin/sh -c "cd /app; grunt mochaWebdriver:test"

View File

@@ -20,6 +20,7 @@ RUN npm install -g grunt-cli
RUn ln -s /usr/local/bin/grunt /usr/bin/grunt
RUN ln -fs /app/* /var/www/html
RUN rm /var/www/html/index.html
ADD ./docker/start_container.sh /start_container.sh
RUN chmod 755 /start_container.sh
EXPOSE 80 3306

View File

@@ -25,9 +25,15 @@ To build and run the image, issue following commands in a terminal with docker i
docker build -t me/ospos https://github.com/jekkos/opensourcepos.git
docker run -d -p 80:80 me/ospos
Docker will clone the latest master into the image and start a LAMP stack with the application configured.
Docker will clone the latest master into the image and start a LAMP stack with the application configured. If you like to persist your changes in this install, then you can use two docker data containers to store database and filesystem changes. In this case you will need following command (first time only)
A more extensive setup guide can be found at [this site](http://www.opensourceposguide.com/guide/gettingstarted/installation)
docker run -d -v /app --name="ospos" -v /var/lib/mysql --name="ospos-sql" -p 127.0.0.1:80:80 me/ospos
After stopping the created container for the first time, this command will be replaced with
docker run -d -v /app --volumes-from="ospos" -v /var/lib/mysql --volumes-from="ospos-sql" -p 127.0.0.1:80:80 me/ospos
Both the data and mysql directories will be persisted in a separate docker container and can be mounted within any other container using the last command. A more extensive setup guide can be found at [this site](http://www.opensourceposguide.com/guide/gettingstarted/installation)
If you like the project, and you are making money out of it on a daily basis, then consider to buy me a coffee so I can keep adding features.

View File

@@ -259,8 +259,9 @@ if (isset($success))
if(count($cart) > 0)
{
?>
<?php echo form_open("sales/cancel_sale", array('id'=>'cancel_sale_form')); ?>
<div id="Cancel_sale">
<?php echo form_open("sales/cancel_sale", array('id'=>'cancel_sale_form')); ?>
<div class='small_button' id='cancel_sale_button' style='float:left; margin-top: 5px;'>
<span><?php echo $this->lang->line('sales_cancel_sale'); ?></span>
</div>
@@ -279,8 +280,9 @@ if (isset($success))
if(count($payments) > 0)
{
?>
<?php echo form_open("sales/complete", array('id'=>'finish_sale_form')); ?>
<div id="finish_sale">
<?php echo form_open("sales/complete", array('id'=>'finish_sale_form')); ?>
<label id="comment_label" for="comment"><?php echo $this->lang->line('common_comments'); ?>:</label>
<?php echo form_textarea(array('name'=>'comment', 'id'=>'comment', 'value'=>$comment, 'rows'=>'4', 'cols'=>'23'));?>
<br />

View File

@@ -1,10 +1,10 @@
#!/bin/bash
if [ ! -f /mysql-configured ]; then
if [ ! -f /app/mysql-configured ]; then
/usr/bin/mysqld_safe &
sleep 10s
MYSQL_PASSWORD=`pwgen -c -n -1 12`
echo mysql root password: $MYSQL_PASSWORD
echo $MYSQL_PASSWORD > /mysql-root-pw.txt
echo $MYSQL_PASSWORD > /app/mysql-root-pw.txt
[ -f /var/www/html/index.html ] && rm /var/www/html/index.html
mysqladmin -u root password $MYSQL_PASSWORD
cp /app/application/config/database.php.tmpl /app/application/config/database.php
@@ -12,7 +12,7 @@ if [ ! -f /mysql-configured ]; then
sed -i -e "s/\(password.*\?=.\).*\(.\)$/\1'${MYSQL_PASSWORD}'\2/g" /app/application/config/database.php
sed -i -e "s/\(database.*\?=.\).*\(.\)$/\1'ospos'\2/g" /app/application/config/database.php
mysql -e "CREATE DATABASE IF NOT EXISTS ospos; use ospos; source /app/database/tables.sql; source /app/database/constraints.sql;" -uroot -p${MYSQL_PASSWORD}
touch /mysql-configured
touch /app/mysql-configured
killall mysqld
sleep 10s
fi

View File

@@ -1,40 +1,22 @@
var assert = require("assert"); // node.js core module
var ospos = require("./ospos");
describe("giftcard numbering test", function () {
var server = "http://localhost/pos";
var url = function url(suffix) {
return server + suffix + "?XDEBUG_SESSION_START=ECLIPSE_DBGP&KEY=14241668456852'";
};
this.timeout(25000);
it("should be able to login", function (done) {
return this.browser.get(url("/index.php"))
.elementByName('username').type("admin").getValue()
.then(function(value) {
assert.equal(value, "admin");
})
.elementByName('password').type("pointofsale").getValue()
.then(function(value) {
assert.ok(value, "pointofsale");
})
.elementByName('loginButton').click()
.elementById('home_module_list').then(function(value) {
assert.ok(value, "Login failed!!")
})
.then(done, done);
return ospos.login(this.browser, done);
});
it.skip("issue #65: giftcard numbering should add properly", function() {
return this.browser.get(url("/index.php/giftcards")).waitForElementByCss(".big_button").click()
.waitForElementByName("value", 4000).type("100").elementById('giftcard_number').clear().type("10")
it("issue #65: giftcard numbering should add properly", function(done) {
return this.browser.get(ospos.url("/index.php/giftcards")).waitForElementByCss(".big_button").click()
.waitForElementByName("value", 10000).type("100").elementById('giftcard_number').clear().type("10")
.elementById("submit").click().waitForElementByXPath("//table/tbody/tr[td/text()='10']/td[4]", 2000).text().then(function (value) {
assert.ok(value, "giftcard failed to be added properly!");
}).elementByCss(".big_button").click().waitForElementByName("value", 4000).type("100").elementById("submit").click()
.waitForElementByXPath("//table/tbody/tr[td/text()='11']/td[4]").text().then(function (value) {
assert.equal(value, "11", "giftcard number not incrementing properly!!");
});
}).then(done, done);
});
});

View File

@@ -1,3 +0,0 @@
exports.loginFirst = function() {
}

View File

@@ -0,0 +1,45 @@
var assert = require('assert');
var ospos = require('./ospos');
describe("create item and make sale", function () {
this.timeout(25000);
it("should be able to add item", function (done) {
return this.browser.get(ospos.url("/index.php/items")).elementByCssSelector("a[title='New Item']", 5000).click()
.waitForElementByName("name", 10000).type("anItem").elementById("category").type("aCategory")
.elementById('cost_price', 2000).clear().type("10").elementById("unit_price", 2000).type("20")
.elementById('tax_name_1', 2000).type('VAT').elementById("tax_percent_name_1", 2000).type("21")
.elementById("1_quantity", 2000).type("1").elementById("reorder_level", 2000).type("0").elementById("submit", 2000).click()
.waitForElementByXPath("//table/tbody/tr[td/text()='anItem']/td[3]").text().then(function (value) {
assert.equal(value, "anItem", "item could not be created!!");
}).then(done, done);
});
it("should be able to make sale", function(done) {
return this.browser.get(ospos.url("/index.php/sales"))
.elementById("item", 3000).type("1\r\n")
.waitForElementByName("quantity", 5000).clear().type("2").elementByName("discount", 1000).type("10").elementByName("edit_item").click()
.elementById("add_payment_button", 2000).click().elementByCssSelector("tbody#payment_contents tr td:last-child", 5000).text().then(function(value) {
assert.equal(value, "$43.56", "price " + value + " in sale register is not correct!!");
}).elementById("finish_sale_button", 3000).submit().elementByCssSelector("#receipt_items tbody tr:nth-child(7) td:last-child", 5000).text().then(function(value) {
assert.equal(value, "$43.56", "price " + value + " on sale receipt is not correct!!");
}).elementByCssSelector("#receipt_items tbody tr:nth-child(9) td:last-child div.total-value", 5000).text().then(function(value) {
assert.equal(value, "-$43.56", "payment amount " + value + " on sale receipt is not correct!!")
}).then(done, done);
});
it("should be able to make receiving", function(done) {
return this.browser.get(ospos.url("/index.php/receivings"))
.elementById("item", 3000).type("1\r\n")
.waitForElementByName("quantity", 3000).clear().type("2").elementByName("edit_item").click()
.elementByCssSelector("td:nth-last-child(2)").text().then(function(value) {
assert.equal(value, "$20.00", "price " + value + " in receiving register is not correct!!");
}).elementById("finish_receiving_button").submit().elementByCssSelector("#receipt_items tbody tr:nth-last-child(2) td:nth-child(2) div.total-value").text().then(function(value) {
assert.equal(value, "$20.00", "price " + value + " on receiving receipt is not correct!!");
})
.then(done, done);
});
});

33
test/ospos.js Normal file
View File

@@ -0,0 +1,33 @@
var assert = require('assert');
var ospos = function() {
var server = "http://localhost";
return {
url : function(suffix) {
return server + suffix;
}
,
login : function(browser, done) {
return browser.get(this.url("/index.php"))
.elementByName('username').type("admin").getValue()
.then(function(value) {
assert.equal(value, "admin");
})
.elementByName('password').type("pointofsale").getValue()
.then(function(value) {
assert.ok(value, "pointofsale");
})
.elementByName('loginButton').click()
.elementById('home_module_list').then(function(value) {
assert.ok(value, "Login failed!!")
})
.then(done, done);
}
}
};
module.exports = ospos();

View File

@@ -1,21 +0,0 @@
Alias /pos %TRAVIS_BUILD_DIR%
<VirtualHost *:80>
DocumentRoot %TRAVIS_BUILD_DIR%
<Directory "%TRAVIS_BUILD_DIR%">
Options FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order deny,allow
Allow from all
</Directory>
# Wire up Apache to use Travis CI's php-fpm.
<IfModule mod_fastcgi.c>
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization
</IfModule>
</VirtualHost>