Comments (5)
thanks a lot for this detailed report! yeah, good old UnitOfWork 🤔
do i understand correctly that the problem is "2015"
vs 2015
? indeed: https://3v4l.org/TIeQW - just great, thanks PHP :-(
as those keys are always phpcr node names, we know they are strings. imho we should change the comparison to !=
instead of !==
https://3v4l.org/oLHhb . casting all array elements to string before comparing could be relatively expensive, as it would be done a lot on large document trees.
if you want to work on this, is suggest to first try to build a minimal test case that shows the problem, and then change the comparison to non-strict.
from phpcr-odm.
Thanks for the suggestion, I think changing it to !=
will work just fine. I forked and made the change, and have been using it in my application just fine, and it fixes the issue while still successfully detecting reorders.
But I don't have much experience with UnitTests. I got the UnitOfWork tests to run, but I am not sure how to write a test to cover this.
I would think I would want to:
- make a parent node, with multiple child nodes with integer names.
- persist and commit the node
- then do nothing, call computeChangeSets, and make sure the uow's scheduledUpdates is an empty array.
I think with the current code, that test would fail, but once the strictness was removed it would pass.
I could see an additional test where the same thing happened, but the children are reordered and the test passes if there is a scheduled update.
Any assistance you could provide would be appreciated.
from phpcr-odm.
i guess its technically not a unit test but more of a functional test, because it uses the database and all ;-)
your approach sounds correct to me. the test to add to is called ReorderTest. actually, it should be enough to add a number-name on this test:
phpcr-odm/tests/Doctrine/Tests/ODM/PHPCR/Functional/ReorderTest.php
Lines 94 to 103 in 50a82a8
from phpcr-odm.
Howdy,
My project finally cleared, and I had time to implement the unit test. You can see it here:
UFTimmy@2c908a3#diff-0fdc105115539a4aae060e42657b1cf2
The test fails with the strict equality checking, but passes once its changed to loose.
Everything look ok, would a pull request with the test and the fix to non strict equality checking be ok?
Thank you!
from phpcr-odm.
yes please, that looks right!
from phpcr-odm.
Related Issues (20)
- Proxy awake on requesting node name
- Binding string with apostrophe using QueryBuilder->literal() crash query HOT 3
- PHP 7 compability issue HOT 4
- How to query @PHPCR\ReferenceMany on Document of same class HOT 2
- Master broken in rebuild HOT 8
- Having problem with 2 ODM managers HOT 1
- GenericDocument.php HOT 1
- Cannot remove nodes with autogenerated @Nodename HOT 1
- translator="attribute" in MetaData is NULL HOT 3
- QueryBuilder: Is it possible to order by id? HOT 3
- Results are not sorted with query builder HOT 4
- QueryBuilder throws InvalidQueryException if node path contains '-<num>e' HOT 1
- Children class Docs vs. Schema defintion HOT 1
- Inheritance for lifecycle callbacks HOT 11
- Classes with names int, string, float, bool... are forbidden in PHP7 HOT 3
- [BUG?] QueryBuilder::setParameter does not exist, so it's not possible to add them during query building HOT 1
- about create indexes HOT 3
- ObjectManager::find requires class name HOT 1
- Symfony 7 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from phpcr-odm.