2010-10-03 20:53:40 +02:00
< ? php
/* Copyright ( C ) 2010 Laurent Destailleur < eldy @ users . sourceforge . net >
2023-05-07 14:31:35 +02:00
* Copyright ( C ) 2023 Alexandre Janniaux < alexandre . janniaux @ gmail . com >
2024-11-14 00:16:43 +01:00
* Copyright ( C ) 2024 Frédéric France < frederic . france @ free . fr >
2010-10-03 20:53:40 +02:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
2013-01-16 15:36:08 +01:00
* the Free Software Foundation ; either version 3 of the License , or
2010-10-03 20:53:40 +02:00
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
* or see https :// www . gnu . org /
2010-10-03 20:53:40 +02:00
*/
/**
* \file test / phpunit / CommandeFournisseurTest . php
2015-01-06 17:54:36 +01:00
* \ingroup test
2010-10-03 20:53:40 +02:00
* \brief PHPUnit test
2015-01-06 17:54:36 +01:00
* \remarks To run this script as CLI : phpunit filename . php
2010-10-03 20:53:40 +02:00
*/
global $conf , $user , $langs , $db ;
//define('TEST_DB_FORCE_TYPE','mysql'); // This is to force using mysql driver
2014-05-01 19:57:53 +02:00
//require_once 'PHPUnit/Autoload.php';
2010-10-03 20:53:40 +02:00
require_once dirname ( __FILE__ ) . '/../../htdocs/master.inc.php' ;
2013-01-16 15:54:07 +01:00
require_once dirname ( __FILE__ ) . '/../../htdocs/fourn/class/fournisseur.commande.class.php' ;
require_once dirname ( __FILE__ ) . '/../../htdocs/fourn/class/fournisseur.product.class.php' ;
2024-02-16 23:26:32 +01:00
require_once dirname ( __FILE__ ) . '/CommonClassTest.class.php' ;
2010-10-03 20:53:40 +02:00
2015-01-06 17:54:36 +01:00
if ( empty ( $user -> id )) {
2021-01-14 15:09:08 +01:00
print " Load permissions for admin user nb 1 \n " ;
$user -> fetch ( 1 );
2024-11-14 00:16:43 +01:00
$user -> loadRights ();
2010-10-03 20:53:40 +02:00
}
2024-02-19 15:28:21 +01:00
$conf -> global -> MAIN_DISABLE_ALL_MAILS = 1 ;
2010-10-03 20:53:40 +02:00
2010-10-13 17:33:51 +02:00
2010-10-03 20:53:40 +02:00
/**
2011-09-23 14:21:00 +02:00
* Class for PHPUnit tests
2010-10-26 21:47:19 +02:00
*
2010-10-03 20:53:40 +02:00
* @ backupGlobals disabled
* @ backupStaticAttributes enabled
* @ remarks backupGlobals must be disabled to have db , conf , user and lang not erased .
*/
2024-02-16 23:26:32 +01:00
class CommandeFournisseurTest extends CommonClassTest
2010-10-03 20:53:40 +02:00
{
2021-01-14 15:09:08 +01:00
/**
* testCommandeFournisseurCreate
*
* @ return int ID of purchase order
*/
public function testCommandeFournisseurCreate ()
{
global $conf , $user , $langs , $db ;
2024-02-19 15:28:21 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2021-01-14 15:09:08 +01:00
// Set supplier and product to use
2024-02-19 15:28:21 +01:00
$socid = 1 ;
$societe = new Societe ( $db );
2021-01-14 15:09:08 +01:00
$societe -> fetch ( $socid );
2024-02-19 15:28:21 +01:00
$product = new ProductFournisseur ( $db );
2021-05-26 11:24:29 +02:00
$product -> fetch ( 0 , 'PINKDRESS' );
2021-01-14 15:09:08 +01:00
if ( $product -> id <= 0 ) {
2023-12-04 11:22:28 +01:00
print " \n " . __METHOD__ . " A product with ref PINKDRESS must exists into database " ;
die ( 1 );
2021-01-14 15:09:08 +01:00
}
2024-02-19 15:28:21 +01:00
$quantity = 10 ;
$ref_fourn = 'SUPPLIER_REF_PHPUNIT' ;
$tva_tx = 19.6 ;
2021-01-14 15:09:08 +01:00
// Delete existing supplier prices
// TODO
// Create 1 supplier price with min qty = 10;
2024-02-19 15:28:21 +01:00
$result = $product -> add_fournisseur ( $user , $societe -> id , $ref_fourn , $quantity ); // This insert record with no value for price. Values are update later with update_buyprice
2021-01-14 15:09:08 +01:00
print __METHOD__ . " add_fournisseur result= " . $result . " \n " ;
$this -> assertGreaterThanOrEqual ( 0 , $result , 'Create 1 supplier price with min qty = 10 if not exists' );
2024-02-19 15:28:21 +01:00
$result = $product -> update_buyprice ( $quantity , 20 , $user , 'HT' , $societe , '' , $ref_fourn , $tva_tx , 0 , 0 );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " update_buyprice result= " . $result . " \n " ;
$this -> assertGreaterThanOrEqual ( 0 , $result , 'Update buyprice' );
// Create purchase order with a too low quantity and option SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY is on
$conf -> global -> SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY = 1 ;
2024-02-19 15:28:21 +01:00
$localobject = new CommandeFournisseur ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2024-02-19 15:28:21 +01:00
$localobject -> lines = array (); // Overwrite lines of order
$line = new CommandeFournisseurLigne ( $db );
$line -> desc = $langs -> trans ( " Description " ) . " specimen line with qty too low " ;
$line -> qty = 1 ; // So lower than $quantity
$line -> subprice = 100 ;
$line -> fk_product = $product -> id ;
$line -> ref_fourn = $ref_fourn ;
$localobject -> lines [] = $line ;
$result = $localobject -> create ( $user );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( - 1 , $result , 'Creation of too low quantity' ); // must be -1 because quantity is lower than minimum of supplier price
2024-02-19 15:28:21 +01:00
$sql = " DELETE FROM " . MAIN_DB_PREFIX . " commande_fournisseur where ref IN ('', '(PROV)') " ;
2021-01-14 15:09:08 +01:00
$db -> query ( $sql );
// Create purchase order
2024-02-19 15:28:21 +01:00
$localobject2 = new CommandeFournisseur ( $db );
2021-01-14 15:09:08 +01:00
$localobject2 -> initAsSpecimen (); // This create 5 lines of first product found for socid 1
2024-02-19 15:28:21 +01:00
$localobject2 -> lines = array (); // Overwrite lines of order
$line = new CommandeFournisseurLigne ( $db );
$line -> desc = $langs -> trans ( " Description " ) . " specimen line ok " ;
$line -> qty = 10 ; // So enough quantity
$line -> subprice = 100 ;
$line -> fk_product = $product -> id ;
$line -> ref_fourn = $ref_fourn ;
$localobject2 -> lines [] = $line ;
$result = $localobject2 -> create ( $user );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertGreaterThan ( 0 , $result );
// Create purchase order with a too low quantity but option SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY is off
$conf -> global -> SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY = 0 ;
2024-02-19 15:28:21 +01:00
$localobject3 = new CommandeFournisseur ( $db );
2021-01-14 15:09:08 +01:00
$localobject3 -> initAsSpecimen ();
2024-02-19 15:28:21 +01:00
$localobject3 -> lines = array (); // Overwrite lines of order
$line = new CommandeFournisseurLigne ( $db );
$line -> desc = $langs -> trans ( " Description " ) . " specimen line with qty too low " ;
$line -> qty = 1 ; // So lower than $quantity
$line -> subprice = 100 ;
$line -> fk_product = $product -> id ;
$line -> ref_fourn = $ref_fourn ;
$localobject3 -> lines [] = $line ;
$result = $localobject3 -> create ( $user );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertGreaterThan ( 0 , $result , 'Creation of too low quantity should be ok' ); // must be id of line because there is no test on minimum quantity
2024-02-19 15:28:21 +01:00
$sql = " DELETE FROM " . MAIN_DB_PREFIX . " commande_fournisseur where ref='' " ;
2021-01-14 15:09:08 +01:00
$db -> query ( $sql );
// Create purchase order
2024-02-19 15:28:21 +01:00
$localobject4 = new CommandeFournisseur ( $db );
2021-01-14 15:09:08 +01:00
$localobject4 -> initAsSpecimen (); // This create 5 lines of first product found for socid 1
2024-02-19 15:28:21 +01:00
$localobject4 -> lines = array (); // Overwrite lines of order
$line = new CommandeFournisseurLigne ( $db );
$line -> desc = $langs -> trans ( " Description " ) . " specimen line ok " ;
$line -> qty = 10 ; // So enough quantity
$line -> subprice = 100 ;
$line -> fk_product = $product -> id ;
$line -> ref_fourn = $ref_fourn ;
$localobject4 -> lines [] = $line ;
$result = $localobject4 -> create ( $user );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " id for purchase order created by testCommandeFournisseurCreate = " . $result . " \n " ;
$this -> assertGreaterThan ( 0 , $result , 'Test to create a purchase order by testCommandeFournisseurCreate' );
return $result ;
}
/**
* testCommandeFournisseurFetch
*
* @ param int $id Id of purchase order
* @ return CommandeFournisseur Purchase order
*
* @ depends testCommandeFournisseurCreate
* The depends says test is run only if previous is ok
*/
public function testCommandeFournisseurFetch ( $id )
{
global $conf , $user , $langs , $db ;
2024-02-19 15:28:21 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2021-01-14 15:09:08 +01:00
2024-02-19 15:28:21 +01:00
$localobject = new CommandeFournisseur ( $db );
$result = $localobject -> fetch ( $id );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " id= " . $id . " result= " . $result . " \n " ;
$this -> assertLessThan ( $result , 0 , 'Failed to fetch supplier order with id ' . $id );
return $localobject ;
}
/**
* testCommandeFournisseurValid
*
2021-02-09 23:50:40 +01:00
* @ param CommandeFournisseur $localobject Supplier order
2021-01-14 15:09:08 +01:00
* @ return CommandeFournisseur Supplier order
*
* @ depends testCommandeFournisseurFetch
* The depends says test is run only if previous is ok
*/
public function testCommandeFournisseurValid ( $localobject )
{
global $conf , $user , $langs , $db ;
2024-02-19 15:28:21 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2021-01-14 15:09:08 +01:00
2024-02-19 15:28:21 +01:00
$result = $localobject -> valid ( $user );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " id= " . $localobject -> id . " result= " . $result . " \n " ;
$this -> assertLessThan ( $result , 0 );
return $localobject ;
}
/**
* testCommandeFournisseurApprove
*
2021-02-09 23:50:40 +01:00
* @ param CommandeFournisseur $localobject Supplier order
2021-01-14 15:09:08 +01:00
* @ return CommandeFournisseur Supplier order
*
* @ depends testCommandeFournisseurValid
* The depends says test is run only if previous is ok
*/
public function testCommandeFournisseurApprove ( $localobject )
{
global $conf , $user , $langs , $db ;
2024-02-19 15:28:21 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2021-01-14 15:09:08 +01:00
2024-02-19 15:28:21 +01:00
$result = $localobject -> approve ( $user );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " id= " . $localobject -> id . " result= " . $result . " \n " ;
$this -> assertLessThan ( $result , 0 );
return $localobject ;
}
/**
* testCommandeFournisseurCancel
*
2021-02-09 23:50:40 +01:00
* @ param CommandeFournisseur $localobject Supplier order
2021-01-14 15:09:08 +01:00
* @ return CommandeFournisseur Supplier order
*
* @ depends testCommandeFournisseurApprove
* The depends says test is run only if previous is ok
*/
public function testCommandeFournisseurCancel ( $localobject )
{
global $conf , $user , $langs , $db ;
2024-02-19 15:28:21 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2021-01-14 15:09:08 +01:00
2024-02-19 15:28:21 +01:00
$result = $localobject -> cancel ( $user );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " id= " . $localobject -> id . " result= " . $result . " \n " ;
$this -> assertLessThan ( $result , 0 );
return $localobject ;
}
/**
* testCommandeFournisseurOther
*
2021-02-09 23:50:40 +01:00
* @ param CommandeFournisseur $localobject Supplier order
2021-01-14 15:09:08 +01:00
* @ return int Id of purchase order
*
* @ depends testCommandeFournisseurCancel
* The depends says test is run only if previous is ok
*/
public function testCommandeFournisseurOther ( $localobject )
{
global $conf , $user , $langs , $db ;
2024-02-19 15:28:21 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2021-01-14 15:09:08 +01:00
/* $result = $localobject -> setstatus ( 0 );
print __METHOD__ . " id= " . $localobject -> id . " result= " . $result . " \n " ;
$this -> assertLessThan ( $result , 0 );
*/
/* $localobject -> info ( $localobject -> id );
print __METHOD__ . " localobject->date_creation= " . $localobject -> date_creation . " \n " ;
$this -> assertNotEquals ( $localobject -> date_creation , '' );
*/
$this -> assertEquals ( 1 , 1 );
return $localobject -> id ;
}
/**
* testCommandeFournisseurDelete
*
* @ param int $id Id of order
* @ return int Result of delete
*
* @ depends testCommandeFournisseurOther
* The depends says test is run only if previous is ok
*/
public function testCommandeFournisseurDelete ( $id )
{
global $conf , $user , $langs , $db ;
2024-02-19 15:28:21 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
$localobject = new CommandeFournisseur ( $db );
$result = $localobject -> fetch ( $id );
$result = $localobject -> delete ( $user );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " id= " . $id . " result= " . $result . " \n " ;
$this -> assertLessThan ( $result , 0 );
return $result ;
}
2010-10-03 20:53:40 +02:00
}