Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
E
EcomDev_PHPUnit
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Open
EcomDev_PHPUnit
Commits
460f4a42
Commit
460f4a42
authored
Oct 24, 2014
by
Ivan Chepurnyi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improvements in the fixtures models
parent
decb1d48
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
226 additions
and
9 deletions
+226
-9
app/code/community/EcomDev/PHPUnit/Model/Fixture/Processor/Eav.php
...community/EcomDev/PHPUnit/Model/Fixture/Processor/Eav.php
+30
-6
app/code/community/EcomDev/PHPUnit/Model/Mysql4/Fixture/AbstractEav.php
...nity/EcomDev/PHPUnit/Model/Mysql4/Fixture/AbstractEav.php
+110
-3
app/code/community/EcomDev/PHPUnit/Model/Mysql4/Fixture/Eav/Catalog/Category.php
...Dev/PHPUnit/Model/Mysql4/Fixture/Eav/Catalog/Category.php
+27
-0
app/code/community/EcomDev/PHPUnit/Model/Mysql4/Fixture/RestoreAwareInterface.php
...ev/PHPUnit/Model/Mysql4/Fixture/RestoreAwareInterface.php
+28
-0
app/code/community/EcomDev/PHPUnit/etc/config.xml
app/code/community/EcomDev/PHPUnit/etc/config.xml
+31
-0
No files found.
app/code/community/EcomDev/PHPUnit/Model/Fixture/Processor/Eav.php
View file @
460f4a42
...
@@ -89,10 +89,15 @@ class EcomDev_PHPUnit_Model_Fixture_Processor_Eav
...
@@ -89,10 +89,15 @@ class EcomDev_PHPUnit_Model_Fixture_Processor_Eav
$this
->
getResource
()
->
beginTransaction
();
$this
->
getResource
()
->
beginTransaction
();
foreach
(
$data
as
$entityType
=>
$values
)
{
foreach
(
$data
as
$entityType
=>
$values
)
{
$eavLoaders
[]
=
$this
->
_getEavLoader
(
$entityType
)
$eavLoaders
[
$entityType
]
=
$this
->
_getEavLoader
(
$entityType
)
->
setFixture
(
$fixture
)
->
setFixture
(
$fixture
)
->
setOptions
(
$fixture
->
getOptions
())
->
setOptions
(
$fixture
->
getOptions
());
->
loadEntity
(
$entityType
,
$values
);
if
(
$eavLoaders
[
$entityType
]
instanceof
EcomDev_PHPUnit_Model_Mysql4_Fixture_RestoreAwareInterface
)
{
$eavLoaders
[
$entityType
]
->
saveData
(
$entityType
);
}
$eavLoaders
[
$entityType
]
->
loadEntity
(
$entityType
,
$values
);
}
}
$this
->
getResource
()
->
commit
();
$this
->
getResource
()
->
commit
();
...
@@ -126,16 +131,35 @@ class EcomDev_PHPUnit_Model_Fixture_Processor_Eav
...
@@ -126,16 +131,35 @@ class EcomDev_PHPUnit_Model_Fixture_Processor_Eav
EcomDev_PHPUnit_Model_FixtureInterface
::
SCOPE_SHARED
);
EcomDev_PHPUnit_Model_FixtureInterface
::
SCOPE_SHARED
);
}
}
$typesToRestore
=
array
();
$this
->
getResource
()
->
beginTransaction
();
$this
->
getResource
()
->
beginTransaction
();
foreach
(
array_keys
(
$data
)
as
$entityType
)
{
foreach
(
array_keys
(
$data
)
as
$entityType
)
{
$eavLoader
=
$this
->
_getEavLoader
(
$entityType
);
if
(
in_array
(
$entityType
,
$ignoreCleanUp
))
{
if
(
in_array
(
$entityType
,
$ignoreCleanUp
))
{
if
(
$eavLoader
instanceof
EcomDev_PHPUnit_Model_Mysql4_Fixture_RestoreAwareInterface
)
{
$eavLoader
->
clearData
(
$entityType
);
}
continue
;
continue
;
}
}
$this
->
_getEavLoader
(
$entityType
)
->
cleanEntity
(
$entityType
);
$eavLoader
->
cleanEntity
(
$entityType
);
if
(
$eavLoader
instanceof
EcomDev_PHPUnit_Model_Mysql4_Fixture_RestoreAwareInterface
)
{
$typesToRestore
[
$entityType
]
=
$eavLoader
;
}
}
}
$this
->
getResource
()
->
commit
();
if
(
$typesToRestore
)
{
$this
->
getResource
()
->
beginTransaction
();
foreach
(
$typesToRestore
as
$entityType
=>
$eavLoader
)
{
$eavLoader
->
restoreData
(
$entityType
)
->
clearData
(
$entityType
);
}
$this
->
getResource
()
->
commit
();
$this
->
getResource
()
->
commit
();
}
return
$this
;
return
$this
;
}
}
}
}
\ No newline at end of file
app/code/community/EcomDev/PHPUnit/Model/Mysql4/Fixture/AbstractEav.php
View file @
460f4a42
...
@@ -22,7 +22,10 @@
...
@@ -22,7 +22,10 @@
*/
*/
abstract
class
EcomDev_PHPUnit_Model_Mysql4_Fixture_AbstractEav
abstract
class
EcomDev_PHPUnit_Model_Mysql4_Fixture_AbstractEav
extends
EcomDev_PHPUnit_Model_Mysql4_Fixture_AbstractComplex
extends
EcomDev_PHPUnit_Model_Mysql4_Fixture_AbstractComplex
implements
EcomDev_PHPUnit_Model_Mysql4_Fixture_RestoreAwareInterface
{
{
const
RESTORE_KEY
=
'restore_%s_data'
;
/**
/**
* List of indexers required to build
* List of indexers required to build
*
*
...
@@ -37,6 +40,20 @@ abstract class EcomDev_PHPUnit_Model_Mysql4_Fixture_AbstractEav
...
@@ -37,6 +40,20 @@ abstract class EcomDev_PHPUnit_Model_Mysql4_Fixture_AbstractEav
*/
*/
protected
$_originalIndexers
=
array
();
protected
$_originalIndexers
=
array
();
/**
* List of tables that should be restored after run
*
* @var string[]
*/
protected
$_restoreTables
=
array
();
/**
* Default data for eav entity
*
* @var array
*/
protected
$_defaultData
=
array
();
/**
/**
* Retrieve required indexers for re-building
* Retrieve required indexers for re-building
*
*
...
@@ -99,6 +116,69 @@ abstract class EcomDev_PHPUnit_Model_Mysql4_Fixture_AbstractEav
...
@@ -99,6 +116,69 @@ abstract class EcomDev_PHPUnit_Model_Mysql4_Fixture_AbstractEav
return
$this
;
return
$this
;
}
}
/**
* Saves data for restoring it after fixture has been cleaned up
*
* @param string $code storage code
* @return $this
*/
public
function
saveData
(
$code
)
{
if
(
$this
->
_restoreTables
)
{
$storageKey
=
sprintf
(
self
::
RESTORE_KEY
,
$code
);
$data
=
array
();
foreach
(
$this
->
_restoreTables
as
$table
)
{
$select
=
$this
->
_getReadAdapter
()
->
select
();
$select
->
from
(
$table
);
$data
[
$table
]
=
$this
->
_getReadAdapter
()
->
fetchAll
(
$select
);
}
$this
->
_fixture
->
setStorageData
(
$storageKey
,
$data
);
}
return
$this
;
}
/**
* Restored saved data
*
* @param string $code storage code
* @return $this
*/
public
function
restoreData
(
$code
)
{
if
(
$this
->
_restoreTables
)
{
$storageKey
=
sprintf
(
self
::
RESTORE_KEY
,
$code
);
$data
=
$this
->
_fixture
->
getStorageData
(
$storageKey
);
foreach
(
$this
->
_restoreTables
as
$table
)
{
if
(
!
empty
(
$data
[
$table
]))
{
$this
->
_getWriteAdapter
()
->
insertOnDuplicate
(
$table
,
$data
[
$table
]
);
}
}
}
return
$this
;
}
/**
* Clears storage from stored backup data
*
* @param $code
* @return $this
*/
public
function
clearData
(
$code
)
{
if
(
$this
->
_restoreTables
)
{
$storageKey
=
sprintf
(
self
::
RESTORE_KEY
,
$code
);
$this
->
_fixture
->
setStorageData
(
$storageKey
,
array
());
}
return
$this
;
}
/**
/**
* Loads EAV data into DB tables
* Loads EAV data into DB tables
*
*
...
@@ -140,15 +220,42 @@ abstract class EcomDev_PHPUnit_Model_Mysql4_Fixture_AbstractEav
...
@@ -140,15 +220,42 @@ abstract class EcomDev_PHPUnit_Model_Mysql4_Fixture_AbstractEav
// See getCustomTableRecords
// See getCustomTableRecords
$customValues
=
array
();
$customValues
=
array
();
foreach
(
$values
as
$index
=>
&
$row
)
{
if
(
$this
->
_defaultData
)
{
$dataToInsert
=
$this
->
_defaultData
;
// Prevent insertion of default data,
// if there is already data available
foreach
(
$values
as
$index
=>
$row
)
{
if
(
isset
(
$row
[
$this
->
_getEntityIdField
(
$entityTypeModel
)])
&&
isset
(
$dataToInsert
[
$this
->
_getEntityIdField
(
$entityTypeModel
)]))
{
$dataToInsert
=
array
();
break
;
}
}
foreach
(
$dataToInsert
as
$row
)
{
array_unshift
(
$values
,
$row
);
}
}
foreach
(
$values
as
$index
=>
$row
)
{
if
(
!
isset
(
$row
[
$this
->
_getEntityIdField
(
$entityTypeModel
)]))
{
if
(
!
isset
(
$row
[
$this
->
_getEntityIdField
(
$entityTypeModel
)]))
{
throw
new
RuntimeException
(
'Entity Id should be specified in EAV fixture'
);
throw
new
RuntimeException
(
'Entity Id should be specified in EAV fixture'
);
}
}
// Fulfill necessary information
// Fulfill necessary information
$row
[
'entity_type_id'
]
=
$entityTypeModel
->
getEntityTypeId
();
$values
[
$index
][
'entity_type_id'
]
=
$entityTypeModel
->
getEntityTypeId
();
$row
=
$values
[
$index
];
if
(
!
isset
(
$row
[
'attribute_set_id'
]))
{
if
(
!
isset
(
$row
[
'attribute_set_id'
]))
{
$row
[
'attribute_set_id'
]
=
$entityTypeModel
->
getDefaultAttributeSetId
();
$defaultAttributeSet
=
$entityTypeModel
->
getDefaultAttributeSetId
();
// Fix Magento core issue with attribute set information for customer and its address
if
(
in_array
(
$entityType
,
array
(
'customer'
,
'customer_address'
)))
{
$defaultAttributeSet
=
0
;
}
$values
[
$index
][
'attribute_set_id'
]
=
$defaultAttributeSet
;
}
}
// Preparing entity table record
// Preparing entity table record
...
...
app/code/community/EcomDev/PHPUnit/Model/Mysql4/Fixture/Eav/Catalog/Category.php
View file @
460f4a42
...
@@ -23,10 +23,37 @@
...
@@ -23,10 +23,37 @@
*/
*/
class
EcomDev_PHPUnit_Model_Mysql4_Fixture_Eav_Catalog_Category
extends
EcomDev_PHPUnit_Model_Mysql4_Fixture_Eav_Catalog_Abstract
class
EcomDev_PHPUnit_Model_Mysql4_Fixture_Eav_Catalog_Category
extends
EcomDev_PHPUnit_Model_Mysql4_Fixture_Eav_Catalog_Abstract
{
{
const
XML_PATH_DEFAULT_DATA
=
'phpunit/suite/fixture/default_data/category'
;
protected
$_requiredIndexers
=
array
(
protected
$_requiredIndexers
=
array
(
'catalog_category_flat'
'catalog_category_flat'
);
);
protected
function
_construct
()
{
parent
::
_construct
();
$defaultData
=
Mage
::
getConfig
()
->
getNode
(
self
::
XML_PATH_DEFAULT_DATA
);
if
(
$defaultData
)
{
foreach
(
$defaultData
->
children
()
as
$item
)
{
if
(
!
isset
(
$item
->
entity_id
))
{
continue
;
}
$entityId
=
(
string
)
$item
->
entity_id
;
$this
->
_defaultData
[
$entityId
]
=
array
();
foreach
(
$item
->
children
()
as
$value
)
{
$this
->
_defaultData
[
$entityId
][
$value
->
getName
()]
=
(
string
)
$value
;
}
}
}
$this
->
_restoreTables
[]
=
$this
->
getTable
(
'catalog/category'
);
foreach
(
array
(
'datetime'
,
'decimal'
,
'int'
,
'text'
,
'varchar'
)
as
$suffix
)
{
$this
->
_restoreTables
[]
=
$this
->
getTable
(
array
(
'catalog/category'
,
$suffix
));
}
}
/**
/**
* Overridden to add easy fixture loading for product associations
* Overridden to add easy fixture loading for product associations
* (non-PHPdoc)
* (non-PHPdoc)
...
...
app/code/community/EcomDev/PHPUnit/Model/Mysql4/Fixture/RestoreAwareInterface.php
0 → 100644
View file @
460f4a42
<?php
interface
EcomDev_PHPUnit_Model_Mysql4_Fixture_RestoreAwareInterface
{
/**
* Saves data for restoring it after fixture has been cleaned up
*
* @param string $code storage code
* @return $this
*/
public
function
saveData
(
$code
);
/**
* Restored saved data
*
* @param string $code storage code
* @return $this
*/
public
function
restoreData
(
$code
);
/**
* Clears storage from stored backup data
*
* @param $code
* @return $this
*/
public
function
clearData
(
$code
);
}
\ No newline at end of file
app/code/community/EcomDev/PHPUnit/etc/config.xml
View file @
460f4a42
...
@@ -114,6 +114,37 @@
...
@@ -114,6 +114,37 @@
<catalog_product>
ecomdev_phpunit/fixture_eav_catalog_product
</catalog_product>
<catalog_product>
ecomdev_phpunit/fixture_eav_catalog_product
</catalog_product>
<catalog_category>
ecomdev_phpunit/fixture_eav_catalog_category
</catalog_category>
<catalog_category>
ecomdev_phpunit/fixture_eav_catalog_category
</catalog_category>
</eav>
</eav>
<default_data>
<category>
<root>
<entity_id>
1
</entity_id>
<parent_id>
0
</parent_id>
<path>
1
</path>
<position>
0
</position>
<level>
0
</level>
<children_count>
1
</children_count>
<name>
Root Catalog
</name>
<url_key>
root-catalog
</url_key>
<is_active>
1
</is_active>
<is_anchor>
0
</is_anchor>
<attribute_set_id>
0
</attribute_set_id>
</root>
<default_category>
<entity_id>
2
</entity_id>
<parent_id>
1
</parent_id>
<path>
1/2
</path>
<position>
1
</position>
<level>
1
</level>
<children_count>
0
</children_count>
<name>
Default Category
</name>
<url_key>
default-category
</url_key>
<is_active>
1
</is_active>
<is_anchor>
0
</is_anchor>
<display_mode>
PRODUCTS
</display_mode>
<include_in_menu>
1
</include_in_menu>
</default_category>
</category>
</default_data>
</fixture>
</fixture>
<app>
<app>
<!-- Application class name for running tests -->
<!-- Application class name for running tests -->
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment