Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Rotua Panjaitan
yii2
Commits
f7a6cb9f
Commit
f7a6cb9f
authored
Mar 30, 2014
by
Qiang Xue
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refactored AR tests.
parent
338b6aa7
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
231 additions
and
241 deletions
+231
-241
ActiveRecordTest.php
tests/unit/extensions/elasticsearch/ActiveRecordTest.php
+13
-33
ActiveRecordTest.php
tests/unit/extensions/redis/ActiveRecordTest.php
+19
-36
ActiveRecordTestTrait.php
tests/unit/framework/ar/ActiveRecordTestTrait.php
+189
-142
ActiveRecordTest.php
tests/unit/framework/db/ActiveRecordTest.php
+10
-30
No files found.
tests/unit/extensions/elasticsearch/ActiveRecordTest.php
View file @
f7a6cb9f
...
...
@@ -20,26 +20,6 @@ class ActiveRecordTest extends ElasticSearchTestCase
{
use
ActiveRecordTestTrait
;
public
function
callCustomerFind
(
$q
=
null
)
{
return
Customer
::
find
(
$q
);
}
public
function
callOrderFind
(
$q
=
null
)
{
return
Order
::
find
(
$q
);
}
public
function
callOrderItemFind
(
$q
=
null
)
{
return
OrderItem
::
find
(
$q
);
}
public
function
callItemFind
(
$q
=
null
)
{
return
Item
::
find
(
$q
);
}
public
function
getCustomerClass
()
{
return
Customer
::
className
();
...
...
@@ -164,7 +144,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
public
function
testFindAsArray
()
{
// asArray
$customer
=
$this
->
callCustomerF
ind
()
->
where
([
'id'
=>
2
])
->
asArray
()
->
one
();
$customer
=
Customer
::
f
ind
()
->
where
([
'id'
=>
2
])
->
asArray
()
->
one
();
$this
->
assertEquals
([
'id'
=>
2
,
'email'
=>
'user2@example.com'
,
...
...
@@ -177,7 +157,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
public
function
testSearch
()
{
$customers
=
$this
->
callCustomerF
ind
()
->
search
()[
'hits'
];
$customers
=
Customer
::
f
ind
()
->
search
()[
'hits'
];
$this
->
assertEquals
(
3
,
$customers
[
'total'
]);
$this
->
assertEquals
(
3
,
count
(
$customers
[
'hits'
]));
$this
->
assertTrue
(
$customers
[
'hits'
][
0
]
instanceof
Customer
);
...
...
@@ -185,12 +165,12 @@ class ActiveRecordTest extends ElasticSearchTestCase
$this
->
assertTrue
(
$customers
[
'hits'
][
2
]
instanceof
Customer
);
// limit vs. totalcount
$customers
=
$this
->
callCustomerF
ind
()
->
limit
(
2
)
->
search
()[
'hits'
];
$customers
=
Customer
::
f
ind
()
->
limit
(
2
)
->
search
()[
'hits'
];
$this
->
assertEquals
(
3
,
$customers
[
'total'
]);
$this
->
assertEquals
(
2
,
count
(
$customers
[
'hits'
]));
// asArray
$result
=
$this
->
callCustomerF
ind
()
->
asArray
()
->
search
()[
'hits'
];
$result
=
Customer
::
f
ind
()
->
asArray
()
->
search
()[
'hits'
];
$this
->
assertEquals
(
3
,
$result
[
'total'
]);
$customers
=
$result
[
'hits'
];
$this
->
assertEquals
(
3
,
count
(
$customers
));
...
...
@@ -213,7 +193,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
// TODO test asArray() + fields() + indexBy()
// find by attributes
$result
=
$this
->
callCustomerF
ind
()
->
where
([
'name'
=>
'user2'
])
->
search
()[
'hits'
];
$result
=
Customer
::
f
ind
()
->
where
([
'name'
=>
'user2'
])
->
search
()[
'hits'
];
$customer
=
reset
(
$result
[
'hits'
]);
$this
->
assertTrue
(
$customer
instanceof
Customer
);
$this
->
assertEquals
(
2
,
$customer
->
id
);
...
...
@@ -223,7 +203,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
public
function
testSearchFacets
()
{
$result
=
$this
->
callCustomerF
ind
()
->
addStatisticalFacet
(
'status_stats'
,
[
'field'
=>
'status'
])
->
search
();
$result
=
Customer
::
f
ind
()
->
addStatisticalFacet
(
'status_stats'
,
[
'field'
=>
'status'
])
->
search
();
$this
->
assertArrayHasKey
(
'facets'
,
$result
);
$this
->
assertEquals
(
3
,
$result
[
'facets'
][
'status_stats'
][
'count'
]);
$this
->
assertEquals
(
4
,
$result
[
'facets'
][
'status_stats'
][
'total'
]);
// sum of values
...
...
@@ -400,10 +380,10 @@ class ActiveRecordTest extends ElasticSearchTestCase
$customer
->
save
(
false
);
$this
->
afterSave
();
$customers
=
$this
->
callCustomerF
ind
()
->
where
([
'status'
=>
true
])
->
all
();
$customers
=
Customer
::
f
ind
()
->
where
([
'status'
=>
true
])
->
all
();
$this
->
assertEquals
(
1
,
count
(
$customers
));
$customers
=
$this
->
callCustomerF
ind
()
->
where
([
'status'
=>
false
])
->
all
();
$customers
=
Customer
::
f
ind
()
->
where
([
'status'
=>
false
])
->
all
();
$this
->
assertEquals
(
2
,
count
(
$customers
));
}
...
...
@@ -411,7 +391,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
{
/** @var TestCase|ActiveRecordTestTrait $this */
// indexBy + asArray
$customers
=
$this
->
callCustomerF
ind
()
->
asArray
()
->
fields
([
'id'
,
'name'
])
->
all
();
$customers
=
Customer
::
f
ind
()
->
asArray
()
->
fields
([
'id'
,
'name'
])
->
all
();
$this
->
assertEquals
(
3
,
count
(
$customers
));
$this
->
assertArrayHasKey
(
'id'
,
$customers
[
0
]);
$this
->
assertArrayHasKey
(
'name'
,
$customers
[
0
]);
...
...
@@ -435,7 +415,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
// indexBy + asArray
$customers
=
$this
->
callCustomerF
ind
()
->
indexBy
(
'name'
)
->
fields
(
'id'
,
'name'
)
->
all
();
$customers
=
Customer
::
f
ind
()
->
indexBy
(
'name'
)
->
fields
(
'id'
,
'name'
)
->
all
();
$this
->
assertEquals
(
3
,
count
(
$customers
));
$this
->
assertTrue
(
$customers
[
'user1'
]
instanceof
$customerClass
);
$this
->
assertTrue
(
$customers
[
'user2'
]
instanceof
$customerClass
);
...
...
@@ -457,7 +437,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
$this
->
assertNull
(
$customers
[
'user3'
]
->
status
);
// indexBy callable + asArray
$customers
=
$this
->
callCustomerF
ind
()
->
indexBy
(
function
(
$customer
)
{
$customers
=
Customer
::
f
ind
()
->
indexBy
(
function
(
$customer
)
{
return
$customer
->
id
.
'-'
.
$customer
->
name
;
})
->
fields
(
'id'
,
'name'
)
->
all
();
$this
->
assertEquals
(
3
,
count
(
$customers
));
...
...
@@ -485,7 +465,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
{
/** @var TestCase|ActiveRecordTestTrait $this */
// indexBy + asArray
$customers
=
$this
->
callCustomerF
ind
()
->
indexBy
(
'name'
)
->
asArray
()
->
fields
(
'id'
,
'name'
)
->
all
();
$customers
=
Customer
::
f
ind
()
->
indexBy
(
'name'
)
->
asArray
()
->
fields
(
'id'
,
'name'
)
->
all
();
$this
->
assertEquals
(
3
,
count
(
$customers
));
$this
->
assertArrayHasKey
(
'id'
,
$customers
[
'user1'
]);
$this
->
assertArrayHasKey
(
'name'
,
$customers
[
'user1'
]);
...
...
@@ -504,7 +484,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
$this
->
assertArrayNotHasKey
(
'status'
,
$customers
[
'user3'
]);
// indexBy callable + asArray
$customers
=
$this
->
callCustomerF
ind
()
->
indexBy
(
function
(
$customer
)
{
$customers
=
Customer
::
f
ind
()
->
indexBy
(
function
(
$customer
)
{
return
$customer
[
'id'
]
.
'-'
.
$customer
[
'name'
];
})
->
asArray
()
->
fields
(
'id'
,
'name'
)
->
all
();
$this
->
assertEquals
(
3
,
count
(
$customers
));
...
...
tests/unit/extensions/redis/ActiveRecordTest.php
View file @
f7a6cb9f
...
...
@@ -16,26 +16,6 @@ class ActiveRecordTest extends RedisTestCase
{
use
ActiveRecordTestTrait
;
public
function
callCustomerFind
(
$q
=
null
)
{
return
Customer
::
find
(
$q
);
}
public
function
callOrderFind
(
$q
=
null
)
{
return
Order
::
find
(
$q
);
}
public
function
callOrderItemFind
(
$q
=
null
)
{
return
OrderItem
::
find
(
$q
);
}
public
function
callItemFind
(
$q
=
null
)
{
return
Item
::
find
(
$q
);
}
public
function
getCustomerClass
()
{
return
Customer
::
className
();
...
...
@@ -142,7 +122,7 @@ class ActiveRecordTest extends RedisTestCase
$this
->
markTestSkipped
(
'Redis does not support orderBy.'
);
}
public
function
testSatisticalFind
()
public
function
testS
t
atisticalFind
()
{
// find count, sum, average, min, max, scalar
$this
->
assertEquals
(
3
,
Customer
::
find
()
->
count
());
...
...
@@ -155,19 +135,19 @@ class ActiveRecordTest extends RedisTestCase
$this
->
assertEquals
(
7
,
OrderItem
::
find
()
->
sum
(
'quantity'
));
}
public
function
test
f
indIndexBy
()
public
function
test
F
indIndexBy
()
{
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
// indexBy
$customers
=
$this
->
callCustomerF
ind
()
->
indexBy
(
'name'
)
/*->orderBy('id')*/
->
all
();
$customers
=
Customer
::
f
ind
()
->
indexBy
(
'name'
)
/*->orderBy('id')*/
->
all
();
$this
->
assertEquals
(
3
,
count
(
$customers
));
$this
->
assertTrue
(
$customers
[
'user1'
]
instanceof
$customerClass
);
$this
->
assertTrue
(
$customers
[
'user2'
]
instanceof
$customerClass
);
$this
->
assertTrue
(
$customers
[
'user3'
]
instanceof
$customerClass
);
// indexBy callable
$customers
=
$this
->
callCustomerF
ind
()
->
indexBy
(
function
(
$customer
)
{
$customers
=
Customer
::
f
ind
()
->
indexBy
(
function
(
$customer
)
{
return
$customer
->
id
.
'-'
.
$customer
->
name
;
})
/*->orderBy('id')*/
->
all
();
// TODO this test is duplicated because of missing orderBy support in redis
$this
->
assertEquals
(
3
,
count
(
$customers
));
...
...
@@ -181,50 +161,53 @@ class ActiveRecordTest extends RedisTestCase
// TODO this test is duplicated because of missing orderBy support in redis
/** @var TestCase|ActiveRecordTestTrait $this */
// all()
$customers
=
$this
->
callCustomerF
ind
()
->
all
();
$customers
=
Customer
::
f
ind
()
->
all
();
$this
->
assertEquals
(
3
,
count
(
$customers
));
$customers
=
$this
->
callCustomerF
ind
()
/*->orderBy('id')*/
->
limit
(
1
)
->
all
();
$customers
=
Customer
::
f
ind
()
/*->orderBy('id')*/
->
limit
(
1
)
->
all
();
$this
->
assertEquals
(
1
,
count
(
$customers
));
$this
->
assertEquals
(
'user1'
,
$customers
[
0
]
->
name
);
$customers
=
$this
->
callCustomerF
ind
()
/*->orderBy('id')*/
->
limit
(
1
)
->
offset
(
1
)
->
all
();
$customers
=
Customer
::
f
ind
()
/*->orderBy('id')*/
->
limit
(
1
)
->
offset
(
1
)
->
all
();
$this
->
assertEquals
(
1
,
count
(
$customers
));
$this
->
assertEquals
(
'user2'
,
$customers
[
0
]
->
name
);
$customers
=
$this
->
callCustomerF
ind
()
/*->orderBy('id')*/
->
limit
(
1
)
->
offset
(
2
)
->
all
();
$customers
=
Customer
::
f
ind
()
/*->orderBy('id')*/
->
limit
(
1
)
->
offset
(
2
)
->
all
();
$this
->
assertEquals
(
1
,
count
(
$customers
));
$this
->
assertEquals
(
'user3'
,
$customers
[
0
]
->
name
);
$customers
=
$this
->
callCustomerF
ind
()
/*->orderBy('id')*/
->
limit
(
2
)
->
offset
(
1
)
->
all
();
$customers
=
Customer
::
f
ind
()
/*->orderBy('id')*/
->
limit
(
2
)
->
offset
(
1
)
->
all
();
$this
->
assertEquals
(
2
,
count
(
$customers
));
$this
->
assertEquals
(
'user2'
,
$customers
[
0
]
->
name
);
$this
->
assertEquals
(
'user3'
,
$customers
[
1
]
->
name
);
$customers
=
$this
->
callCustomerF
ind
()
->
limit
(
2
)
->
offset
(
3
)
->
all
();
$customers
=
Customer
::
f
ind
()
->
limit
(
2
)
->
offset
(
3
)
->
all
();
$this
->
assertEquals
(
0
,
count
(
$customers
));
// one()
$customer
=
$this
->
callCustomerF
ind
()
/*->orderBy('id')*/
->
one
();
$customer
=
Customer
::
f
ind
()
/*->orderBy('id')*/
->
one
();
$this
->
assertEquals
(
'user1'
,
$customer
->
name
);
$customer
=
$this
->
callCustomerF
ind
()
/*->orderBy('id')*/
->
offset
(
0
)
->
one
();
$customer
=
Customer
::
f
ind
()
/*->orderBy('id')*/
->
offset
(
0
)
->
one
();
$this
->
assertEquals
(
'user1'
,
$customer
->
name
);
$customer
=
$this
->
callCustomerF
ind
()
/*->orderBy('id')*/
->
offset
(
1
)
->
one
();
$customer
=
Customer
::
f
ind
()
/*->orderBy('id')*/
->
offset
(
1
)
->
one
();
$this
->
assertEquals
(
'user2'
,
$customer
->
name
);
$customer
=
$this
->
callCustomerF
ind
()
/*->orderBy('id')*/
->
offset
(
2
)
->
one
();
$customer
=
Customer
::
f
ind
()
/*->orderBy('id')*/
->
offset
(
2
)
->
one
();
$this
->
assertEquals
(
'user3'
,
$customer
->
name
);
$customer
=
$this
->
callCustomerF
ind
()
->
offset
(
3
)
->
one
();
$customer
=
Customer
::
f
ind
()
->
offset
(
3
)
->
one
();
$this
->
assertNull
(
$customer
);
}
public
function
testFindEagerViaRelation
()
{
/** @var \yii\db\ActiveRecordInterface $orderClass */
$orderClass
=
$this
->
getOrderClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
$orders
=
$
this
->
callOrderF
ind
()
->
with
(
'items'
)
/*->orderBy('id')*/
->
all
();
// TODO this test is duplicated because of missing orderBy support in redis
$orders
=
$
orderClass
::
f
ind
()
->
with
(
'items'
)
/*->orderBy('id')*/
->
all
();
// TODO this test is duplicated because of missing orderBy support in redis
$this
->
assertEquals
(
3
,
count
(
$orders
));
$order
=
$orders
[
0
];
$this
->
assertEquals
(
1
,
$order
->
id
);
...
...
tests/unit/framework/ar/ActiveRecordTestTrait.php
View file @
f7a6cb9f
...
...
@@ -15,41 +15,13 @@ use yiiunit\data\ar\Customer;
use
yiiunit\data\ar\Order
;
/**
* This trait provides unit tests shared by the differen AR implementations
* This trait provides unit tests shared by the differen
t
AR implementations
*
* @var TestCase $this
*/
trait
ActiveRecordTestTrait
{
/**
* This method should call Customer::find($q)
* @param $q
* @return mixed
*/
abstract
public
function
callCustomerFind
(
$q
=
null
);
/**
* This method should call Order::find($q)
* @param $q
* @return mixed
*/
abstract
public
function
callOrderFind
(
$q
=
null
);
/**
* This method should call OrderItem::find($q)
* @param $q
* @return mixed
*/
abstract
public
function
callOrderItemFind
(
$q
=
null
);
/**
* This method should call Item::find($q)
* @param $q
* @return mixed
*/
abstract
public
function
callItemFind
(
$q
=
null
);
/**
* This method should return the classname of Customer class
* @return string
*/
...
...
@@ -82,23 +54,24 @@ trait ActiveRecordTestTrait
public
function
testFind
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
// find one
$result
=
$
this
->
callCustomerF
ind
();
$result
=
$
customerClass
::
f
ind
();
$this
->
assertTrue
(
$result
instanceof
ActiveQueryInterface
);
$customer
=
$result
->
one
();
$this
->
assertTrue
(
$customer
instanceof
$customerClass
);
// find all
$customers
=
$
this
->
callCustomerF
ind
()
->
all
();
$customers
=
$
customerClass
::
f
ind
()
->
all
();
$this
->
assertEquals
(
3
,
count
(
$customers
));
$this
->
assertTrue
(
$customers
[
0
]
instanceof
$customerClass
);
$this
->
assertTrue
(
$customers
[
1
]
instanceof
$customerClass
);
$this
->
assertTrue
(
$customers
[
2
]
instanceof
$customerClass
);
// find all asArray
$customers
=
$
this
->
callCustomerF
ind
()
->
asArray
()
->
all
();
$customers
=
$
customerClass
::
f
ind
()
->
asArray
()
->
all
();
$this
->
assertEquals
(
3
,
count
(
$customers
));
$this
->
assertArrayHasKey
(
'id'
,
$customers
[
0
]);
$this
->
assertArrayHasKey
(
'name'
,
$customers
[
0
]);
...
...
@@ -117,41 +90,44 @@ trait ActiveRecordTestTrait
$this
->
assertArrayHasKey
(
'status'
,
$customers
[
2
]);
// find by a single primary key
$customer
=
$
this
->
callCustomerF
ind
(
2
);
$customer
=
$
customerClass
::
f
ind
(
2
);
$this
->
assertTrue
(
$customer
instanceof
$customerClass
);
$this
->
assertEquals
(
'user2'
,
$customer
->
name
);
$customer
=
$
this
->
callCustomerF
ind
(
5
);
$customer
=
$
customerClass
::
f
ind
(
5
);
$this
->
assertNull
(
$customer
);
$customer
=
$
this
->
callCustomerF
ind
([
'id'
=>
[
5
,
6
,
1
]]);
$customer
=
$
customerClass
::
f
ind
([
'id'
=>
[
5
,
6
,
1
]]);
$this
->
assertEquals
(
1
,
count
(
$customer
));
$customer
=
$
this
->
callCustomerF
ind
()
->
where
([
'id'
=>
[
5
,
6
,
1
]])
->
one
();
$customer
=
$
customerClass
::
f
ind
()
->
where
([
'id'
=>
[
5
,
6
,
1
]])
->
one
();
$this
->
assertNotNull
(
$customer
);
// find by column values
$customer
=
$
this
->
callCustomerF
ind
([
'id'
=>
2
,
'name'
=>
'user2'
]);
$customer
=
$
customerClass
::
f
ind
([
'id'
=>
2
,
'name'
=>
'user2'
]);
$this
->
assertTrue
(
$customer
instanceof
$customerClass
);
$this
->
assertEquals
(
'user2'
,
$customer
->
name
);
$customer
=
$
this
->
callCustomerF
ind
([
'id'
=>
2
,
'name'
=>
'user1'
]);
$customer
=
$
customerClass
::
f
ind
([
'id'
=>
2
,
'name'
=>
'user1'
]);
$this
->
assertNull
(
$customer
);
$customer
=
$
this
->
callCustomerF
ind
([
'id'
=>
5
]);
$customer
=
$
customerClass
::
f
ind
([
'id'
=>
5
]);
$this
->
assertNull
(
$customer
);
$customer
=
$
this
->
callCustomerF
ind
([
'name'
=>
'user5'
]);
$customer
=
$
customerClass
::
f
ind
([
'name'
=>
'user5'
]);
$this
->
assertNull
(
$customer
);
// find by attributes
$customer
=
$
this
->
callCustomerF
ind
()
->
where
([
'name'
=>
'user2'
])
->
one
();
$customer
=
$
customerClass
::
f
ind
()
->
where
([
'name'
=>
'user2'
])
->
one
();
$this
->
assertTrue
(
$customer
instanceof
$customerClass
);
$this
->
assertEquals
(
2
,
$customer
->
id
);
// scope
$this
->
assertEquals
(
2
,
count
(
$
this
->
callCustomerF
ind
()
->
active
()
->
all
()));
$this
->
assertEquals
(
2
,
$
this
->
callCustomerF
ind
()
->
active
()
->
count
());
$this
->
assertEquals
(
2
,
count
(
$
customerClass
::
f
ind
()
->
active
()
->
all
()));
$this
->
assertEquals
(
2
,
$
customerClass
::
f
ind
()
->
active
()
->
count
());
}
public
function
testFindAsArray
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
// asArray
$customer
=
$
this
->
callCustomerF
ind
()
->
where
([
'id'
=>
2
])
->
asArray
()
->
one
();
$customer
=
$
customerClass
::
f
ind
()
->
where
([
'id'
=>
2
])
->
asArray
()
->
one
();
$this
->
assertEquals
([
'id'
=>
2
,
'email'
=>
'user2@example.com'
,
...
...
@@ -164,38 +140,45 @@ trait ActiveRecordTestTrait
public
function
testFindScalar
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
// query scalar
$customerName
=
$
this
->
callCustomerF
ind
()
->
where
([
'id'
=>
2
])
->
scalar
(
'name'
);
$customerName
=
$
customerClass
::
f
ind
()
->
where
([
'id'
=>
2
])
->
scalar
(
'name'
);
$this
->
assertEquals
(
'user2'
,
$customerName
);
$customerName
=
$
this
->
callCustomerF
ind
()
->
where
([
'status'
=>
2
])
->
scalar
(
'name'
);
$customerName
=
$
customerClass
::
f
ind
()
->
where
([
'status'
=>
2
])
->
scalar
(
'name'
);
$this
->
assertEquals
(
'user3'
,
$customerName
);
$customerName
=
$
this
->
callCustomerF
ind
()
->
where
([
'status'
=>
2
])
->
scalar
(
'noname'
);
$customerName
=
$
customerClass
::
f
ind
()
->
where
([
'status'
=>
2
])
->
scalar
(
'noname'
);
$this
->
assertNull
(
$customerName
);
$customerId
=
$
this
->
callCustomerF
ind
()
->
where
([
'status'
=>
2
])
->
scalar
(
'id'
);
$customerId
=
$
customerClass
::
f
ind
()
->
where
([
'status'
=>
2
])
->
scalar
(
'id'
);
$this
->
assertEquals
(
3
,
$customerId
);
}
public
function
testFindColumn
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
$this
->
assertEquals
([
'user1'
,
'user2'
,
'user3'
],
$
this
->
callCustomerF
ind
()
->
orderBy
([
'name'
=>
SORT_ASC
])
->
column
(
'name'
));
$this
->
assertEquals
([
'user3'
,
'user2'
,
'user1'
],
$
this
->
callCustomerF
ind
()
->
orderBy
([
'name'
=>
SORT_DESC
])
->
column
(
'name'
));
$this
->
assertEquals
([
'user1'
,
'user2'
,
'user3'
],
$
customerClass
::
f
ind
()
->
orderBy
([
'name'
=>
SORT_ASC
])
->
column
(
'name'
));
$this
->
assertEquals
([
'user3'
,
'user2'
,
'user1'
],
$
customerClass
::
f
ind
()
->
orderBy
([
'name'
=>
SORT_DESC
])
->
column
(
'name'
));
}
public
function
testFindIndexBy
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
// indexBy
$customers
=
$
this
->
callCustomerF
ind
()
->
indexBy
(
'name'
)
->
orderBy
(
'id'
)
->
all
();
$customers
=
$
customerClass
::
f
ind
()
->
indexBy
(
'name'
)
->
orderBy
(
'id'
)
->
all
();
$this
->
assertEquals
(
3
,
count
(
$customers
));
$this
->
assertTrue
(
$customers
[
'user1'
]
instanceof
$customerClass
);
$this
->
assertTrue
(
$customers
[
'user2'
]
instanceof
$customerClass
);
$this
->
assertTrue
(
$customers
[
'user3'
]
instanceof
$customerClass
);
// indexBy callable
$customers
=
$
this
->
callCustomerF
ind
()
->
indexBy
(
function
(
$customer
)
{
$customers
=
$
customerClass
::
f
ind
()
->
indexBy
(
function
(
$customer
)
{
return
$customer
->
id
.
'-'
.
$customer
->
name
;
})
->
orderBy
(
'id'
)
->
all
();
$this
->
assertEquals
(
3
,
count
(
$customers
));
...
...
@@ -206,9 +189,12 @@ trait ActiveRecordTestTrait
public
function
testFindIndexByAsArray
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
// indexBy + asArray
$customers
=
$
this
->
callCustomerF
ind
()
->
asArray
()
->
indexBy
(
'name'
)
->
all
();
$customers
=
$
customerClass
::
f
ind
()
->
asArray
()
->
indexBy
(
'name'
)
->
all
();
$this
->
assertEquals
(
3
,
count
(
$customers
));
$this
->
assertArrayHasKey
(
'id'
,
$customers
[
'user1'
]);
$this
->
assertArrayHasKey
(
'name'
,
$customers
[
'user1'
]);
...
...
@@ -227,7 +213,7 @@ trait ActiveRecordTestTrait
$this
->
assertArrayHasKey
(
'status'
,
$customers
[
'user3'
]);
// indexBy callable + asArray
$customers
=
$
this
->
callCustomerF
ind
()
->
indexBy
(
function
(
$customer
)
{
$customers
=
$
customerClass
::
f
ind
()
->
indexBy
(
function
(
$customer
)
{
return
$customer
[
'id'
]
.
'-'
.
$customer
[
'name'
];
})
->
asArray
()
->
all
();
$this
->
assertEquals
(
3
,
count
(
$customers
));
...
...
@@ -250,12 +236,13 @@ trait ActiveRecordTestTrait
public
function
testRefresh
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
$customer
=
new
$customerClass
();
$this
->
assertFalse
(
$customer
->
refresh
());
$customer
=
$
this
->
callCustomerF
ind
(
1
);
$customer
=
$
customerClass
::
f
ind
(
1
);
$customer
->
name
=
'to be refreshed'
;
$this
->
assertTrue
(
$customer
->
refresh
());
$this
->
assertEquals
(
'user1'
,
$customer
->
name
);
...
...
@@ -263,7 +250,9 @@ trait ActiveRecordTestTrait
public
function
testEquals
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var \yii\db\ActiveRecordInterface $itemClass */
$itemClass
=
$this
->
getItemClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
...
...
@@ -275,123 +264,141 @@ trait ActiveRecordTestTrait
$customerB
=
new
$itemClass
();
$this
->
assertFalse
(
$customerA
->
equals
(
$customerB
));
$customerA
=
$
this
->
callCustomerF
ind
(
1
);
$customerB
=
$
this
->
callCustomerF
ind
(
2
);
$customerA
=
$
customerClass
::
f
ind
(
1
);
$customerB
=
$
customerClass
::
f
ind
(
2
);
$this
->
assertFalse
(
$customerA
->
equals
(
$customerB
));
$customerB
=
$
this
->
callCustomerF
ind
(
1
);
$customerB
=
$
customerClass
::
f
ind
(
1
);
$this
->
assertTrue
(
$customerA
->
equals
(
$customerB
));
$customerA
=
$
this
->
callCustomerF
ind
(
1
);
$customerB
=
$
this
->
callItemF
ind
(
1
);
$customerA
=
$
customerClass
::
f
ind
(
1
);
$customerB
=
$
itemClass
::
f
ind
(
1
);
$this
->
assertFalse
(
$customerA
->
equals
(
$customerB
));
}
public
function
testFindCount
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
$this
->
assertEquals
(
3
,
$
this
->
callCustomerF
ind
()
->
count
());
$this
->
assertEquals
(
3
,
$
customerClass
::
f
ind
()
->
count
());
$this
->
assertEquals
(
1
,
$
this
->
callCustomerF
ind
()
->
where
([
'id'
=>
1
])
->
count
());
$this
->
assertEquals
(
2
,
$
this
->
callCustomerF
ind
()
->
where
([
'id'
=>
[
1
,
2
]])
->
count
());
$this
->
assertEquals
(
2
,
$
this
->
callCustomerF
ind
()
->
where
([
'id'
=>
[
1
,
2
]])
->
offset
(
1
)
->
count
());
$this
->
assertEquals
(
2
,
$
this
->
callCustomerF
ind
()
->
where
([
'id'
=>
[
1
,
2
]])
->
offset
(
2
)
->
count
());
$this
->
assertEquals
(
1
,
$
customerClass
::
f
ind
()
->
where
([
'id'
=>
1
])
->
count
());
$this
->
assertEquals
(
2
,
$
customerClass
::
f
ind
()
->
where
([
'id'
=>
[
1
,
2
]])
->
count
());
$this
->
assertEquals
(
2
,
$
customerClass
::
f
ind
()
->
where
([
'id'
=>
[
1
,
2
]])
->
offset
(
1
)
->
count
());
$this
->
assertEquals
(
2
,
$
customerClass
::
f
ind
()
->
where
([
'id'
=>
[
1
,
2
]])
->
offset
(
2
)
->
count
());
// limit should have no effect on count()
$this
->
assertEquals
(
3
,
$
this
->
callCustomerF
ind
()
->
limit
(
1
)
->
count
());
$this
->
assertEquals
(
3
,
$
this
->
callCustomerF
ind
()
->
limit
(
2
)
->
count
());
$this
->
assertEquals
(
3
,
$
this
->
callCustomerF
ind
()
->
limit
(
10
)
->
count
());
$this
->
assertEquals
(
3
,
$
this
->
callCustomerF
ind
()
->
offset
(
2
)
->
limit
(
2
)
->
count
());
$this
->
assertEquals
(
3
,
$
customerClass
::
f
ind
()
->
limit
(
1
)
->
count
());
$this
->
assertEquals
(
3
,
$
customerClass
::
f
ind
()
->
limit
(
2
)
->
count
());
$this
->
assertEquals
(
3
,
$
customerClass
::
f
ind
()
->
limit
(
10
)
->
count
());
$this
->
assertEquals
(
3
,
$
customerClass
::
f
ind
()
->
offset
(
2
)
->
limit
(
2
)
->
count
());
}
public
function
testFindLimit
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
// all()
$customers
=
$
this
->
callCustomerF
ind
()
->
all
();
$customers
=
$
customerClass
::
f
ind
()
->
all
();
$this
->
assertEquals
(
3
,
count
(
$customers
));
$customers
=
$
this
->
callCustomerF
ind
()
->
orderBy
(
'id'
)
->
limit
(
1
)
->
all
();
$customers
=
$
customerClass
::
f
ind
()
->
orderBy
(
'id'
)
->
limit
(
1
)
->
all
();
$this
->
assertEquals
(
1
,
count
(
$customers
));
$this
->
assertEquals
(
'user1'
,
$customers
[
0
]
->
name
);
$customers
=
$
this
->
callCustomerF
ind
()
->
orderBy
(
'id'
)
->
limit
(
1
)
->
offset
(
1
)
->
all
();
$customers
=
$
customerClass
::
f
ind
()
->
orderBy
(
'id'
)
->
limit
(
1
)
->
offset
(
1
)
->
all
();
$this
->
assertEquals
(
1
,
count
(
$customers
));
$this
->
assertEquals
(
'user2'
,
$customers
[
0
]
->
name
);
$customers
=
$
this
->
callCustomerF
ind
()
->
orderBy
(
'id'
)
->
limit
(
1
)
->
offset
(
2
)
->
all
();
$customers
=
$
customerClass
::
f
ind
()
->
orderBy
(
'id'
)
->
limit
(
1
)
->
offset
(
2
)
->
all
();
$this
->
assertEquals
(
1
,
count
(
$customers
));
$this
->
assertEquals
(
'user3'
,
$customers
[
0
]
->
name
);
$customers
=
$
this
->
callCustomerF
ind
()
->
orderBy
(
'id'
)
->
limit
(
2
)
->
offset
(
1
)
->
all
();
$customers
=
$
customerClass
::
f
ind
()
->
orderBy
(
'id'
)
->
limit
(
2
)
->
offset
(
1
)
->
all
();
$this
->
assertEquals
(
2
,
count
(
$customers
));
$this
->
assertEquals
(
'user2'
,
$customers
[
0
]
->
name
);
$this
->
assertEquals
(
'user3'
,
$customers
[
1
]
->
name
);
$customers
=
$
this
->
callCustomerF
ind
()
->
limit
(
2
)
->
offset
(
3
)
->
all
();
$customers
=
$
customerClass
::
f
ind
()
->
limit
(
2
)
->
offset
(
3
)
->
all
();
$this
->
assertEquals
(
0
,
count
(
$customers
));
// one()
$customer
=
$
this
->
callCustomerF
ind
()
->
orderBy
(
'id'
)
->
one
();
$customer
=
$
customerClass
::
f
ind
()
->
orderBy
(
'id'
)
->
one
();
$this
->
assertEquals
(
'user1'
,
$customer
->
name
);
$customer
=
$
this
->
callCustomerF
ind
()
->
orderBy
(
'id'
)
->
offset
(
0
)
->
one
();
$customer
=
$
customerClass
::
f
ind
()
->
orderBy
(
'id'
)
->
offset
(
0
)
->
one
();
$this
->
assertEquals
(
'user1'
,
$customer
->
name
);
$customer
=
$
this
->
callCustomerF
ind
()
->
orderBy
(
'id'
)
->
offset
(
1
)
->
one
();
$customer
=
$
customerClass
::
f
ind
()
->
orderBy
(
'id'
)
->
offset
(
1
)
->
one
();
$this
->
assertEquals
(
'user2'
,
$customer
->
name
);
$customer
=
$
this
->
callCustomerF
ind
()
->
orderBy
(
'id'
)
->
offset
(
2
)
->
one
();
$customer
=
$
customerClass
::
f
ind
()
->
orderBy
(
'id'
)
->
offset
(
2
)
->
one
();
$this
->
assertEquals
(
'user3'
,
$customer
->
name
);
$customer
=
$
this
->
callCustomerF
ind
()
->
offset
(
3
)
->
one
();
$customer
=
$
customerClass
::
f
ind
()
->
offset
(
3
)
->
one
();
$this
->
assertNull
(
$customer
);
}
public
function
testFindComplexCondition
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
$this
->
assertEquals
(
2
,
$
this
->
callCustomerF
ind
()
->
where
([
'OR'
,
[
'name'
=>
'user1'
],
[
'name'
=>
'user2'
]])
->
count
());
$this
->
assertEquals
(
2
,
count
(
$
this
->
callCustomerF
ind
()
->
where
([
'OR'
,
[
'name'
=>
'user1'
],
[
'name'
=>
'user2'
]])
->
all
()));
$this
->
assertEquals
(
2
,
$
customerClass
::
f
ind
()
->
where
([
'OR'
,
[
'name'
=>
'user1'
],
[
'name'
=>
'user2'
]])
->
count
());
$this
->
assertEquals
(
2
,
count
(
$
customerClass
::
f
ind
()
->
where
([
'OR'
,
[
'name'
=>
'user1'
],
[
'name'
=>
'user2'
]])
->
all
()));
$this
->
assertEquals
(
2
,
$
this
->
callCustomerF
ind
()
->
where
([
'name'
=>
[
'user1'
,
'user2'
]])
->
count
());
$this
->
assertEquals
(
2
,
count
(
$
this
->
callCustomerF
ind
()
->
where
([
'name'
=>
[
'user1'
,
'user2'
]])
->
all
()));
$this
->
assertEquals
(
2
,
$
customerClass
::
f
ind
()
->
where
([
'name'
=>
[
'user1'
,
'user2'
]])
->
count
());
$this
->
assertEquals
(
2
,
count
(
$
customerClass
::
f
ind
()
->
where
([
'name'
=>
[
'user1'
,
'user2'
]])
->
all
()));
$this
->
assertEquals
(
1
,
$
this
->
callCustomerF
ind
()
->
where
([
'AND'
,
[
'name'
=>
[
'user2'
,
'user3'
]],
[
'BETWEEN'
,
'status'
,
2
,
4
]])
->
count
());
$this
->
assertEquals
(
1
,
count
(
$
this
->
callCustomerF
ind
()
->
where
([
'AND'
,
[
'name'
=>
[
'user2'
,
'user3'
]],
[
'BETWEEN'
,
'status'
,
2
,
4
]])
->
all
()));
$this
->
assertEquals
(
1
,
$
customerClass
::
f
ind
()
->
where
([
'AND'
,
[
'name'
=>
[
'user2'
,
'user3'
]],
[
'BETWEEN'
,
'status'
,
2
,
4
]])
->
count
());
$this
->
assertEquals
(
1
,
count
(
$
customerClass
::
f
ind
()
->
where
([
'AND'
,
[
'name'
=>
[
'user2'
,
'user3'
]],
[
'BETWEEN'
,
'status'
,
2
,
4
]])
->
all
()));
}
public
function
testFindNullValues
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
$customer
=
$
this
->
callCustomerF
ind
(
2
);
$customer
=
$
customerClass
::
f
ind
(
2
);
$customer
->
name
=
null
;
$customer
->
save
(
false
);
$this
->
afterSave
();
$result
=
$
this
->
callCustomerF
ind
()
->
where
([
'name'
=>
null
])
->
all
();
$result
=
$
customerClass
::
f
ind
()
->
where
([
'name'
=>
null
])
->
all
();
$this
->
assertEquals
(
1
,
count
(
$result
));
$this
->
assertEquals
(
2
,
reset
(
$result
)
->
primaryKey
);
}
public
function
testExists
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
$this
->
assertTrue
(
$
this
->
callCustomerF
ind
()
->
where
([
'id'
=>
2
])
->
exists
());
$this
->
assertFalse
(
$
this
->
callCustomerF
ind
()
->
where
([
'id'
=>
5
])
->
exists
());
$this
->
assertTrue
(
$
this
->
callCustomerF
ind
()
->
where
([
'name'
=>
'user1'
])
->
exists
());
$this
->
assertFalse
(
$
this
->
callCustomerF
ind
()
->
where
([
'name'
=>
'user5'
])
->
exists
());
$this
->
assertTrue
(
$
this
->
callCustomerF
ind
()
->
where
([
'id'
=>
[
2
,
3
]])
->
exists
());
$this
->
assertTrue
(
$
this
->
callCustomerF
ind
()
->
where
([
'id'
=>
[
2
,
3
]])
->
offset
(
1
)
->
exists
());
$this
->
assertFalse
(
$
this
->
callCustomerF
ind
()
->
where
([
'id'
=>
[
2
,
3
]])
->
offset
(
2
)
->
exists
());
$this
->
assertTrue
(
$
customerClass
::
f
ind
()
->
where
([
'id'
=>
2
])
->
exists
());
$this
->
assertFalse
(
$
customerClass
::
f
ind
()
->
where
([
'id'
=>
5
])
->
exists
());
$this
->
assertTrue
(
$
customerClass
::
f
ind
()
->
where
([
'name'
=>
'user1'
])
->
exists
());
$this
->
assertFalse
(
$
customerClass
::
f
ind
()
->
where
([
'name'
=>
'user5'
])
->
exists
());
$this
->
assertTrue
(
$
customerClass
::
f
ind
()
->
where
([
'id'
=>
[
2
,
3
]])
->
exists
());
$this
->
assertTrue
(
$
customerClass
::
f
ind
()
->
where
([
'id'
=>
[
2
,
3
]])
->
offset
(
1
)
->
exists
());
$this
->
assertFalse
(
$
customerClass
::
f
ind
()
->
where
([
'id'
=>
[
2
,
3
]])
->
offset
(
2
)
->
exists
());
}
public
function
testFindLazy
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
$customer
=
$
this
->
callCustomerF
ind
(
2
);
$customer
=
$
customerClass
::
f
ind
(
2
);
$this
->
assertFalse
(
$customer
->
isRelationPopulated
(
'orders'
));
$orders
=
$customer
->
orders
;
$this
->
assertTrue
(
$customer
->
isRelationPopulated
(
'orders'
));
...
...
@@ -403,7 +410,7 @@ trait ActiveRecordTestTrait
$this
->
assertFalse
(
$customer
->
isRelationPopulated
(
'orders'
));
/** @var Customer $customer */
$customer
=
$
this
->
callCustomerF
ind
(
2
);
$customer
=
$
customerClass
::
f
ind
(
2
);
$this
->
assertFalse
(
$customer
->
isRelationPopulated
(
'orders'
));
$orders
=
$customer
->
getOrders
()
->
where
([
'id'
=>
3
])
->
all
();
$this
->
assertFalse
(
$customer
->
isRelationPopulated
(
'orders'
));
...
...
@@ -415,8 +422,13 @@ trait ActiveRecordTestTrait
public
function
testFindEager
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var \yii\db\ActiveRecordInterface $orderClass */
$orderClass
=
$this
->
getOrderClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
$customers
=
$
this
->
callCustomerF
ind
()
->
with
(
'orders'
)
->
indexBy
(
'id'
)
->
all
();
$customers
=
$
customerClass
::
f
ind
()
->
with
(
'orders'
)
->
indexBy
(
'id'
)
->
all
();
ksort
(
$customers
);
$this
->
assertEquals
(
3
,
count
(
$customers
));
$this
->
assertTrue
(
$customers
[
1
]
->
isRelationPopulated
(
'orders'
));
...
...
@@ -429,17 +441,17 @@ trait ActiveRecordTestTrait
unset
(
$customers
[
1
]
->
orders
);
$this
->
assertFalse
(
$customers
[
1
]
->
isRelationPopulated
(
'orders'
));
$customer
=
$
this
->
callCustomerF
ind
()
->
where
([
'id'
=>
1
])
->
with
(
'orders'
)
->
one
();
$customer
=
$
customerClass
::
f
ind
()
->
where
([
'id'
=>
1
])
->
with
(
'orders'
)
->
one
();
$this
->
assertTrue
(
$customer
->
isRelationPopulated
(
'orders'
));
$this
->
assertEquals
(
1
,
count
(
$customer
->
orders
));
$this
->
assertEquals
(
1
,
count
(
$customer
->
relatedRecords
));
// multiple with() calls
$orders
=
$
this
->
callOrderF
ind
()
->
with
(
'customer'
,
'items'
)
->
all
();
$orders
=
$
orderClass
::
f
ind
()
->
with
(
'customer'
,
'items'
)
->
all
();
$this
->
assertEquals
(
3
,
count
(
$orders
));
$this
->
assertTrue
(
$orders
[
0
]
->
isRelationPopulated
(
'customer'
));
$this
->
assertTrue
(
$orders
[
0
]
->
isRelationPopulated
(
'items'
));
$orders
=
$
this
->
callOrderF
ind
()
->
with
(
'customer'
)
->
with
(
'items'
)
->
all
();
$orders
=
$
orderClass
::
f
ind
()
->
with
(
'customer'
)
->
with
(
'items'
)
->
all
();
$this
->
assertEquals
(
3
,
count
(
$orders
));
$this
->
assertTrue
(
$orders
[
0
]
->
isRelationPopulated
(
'customer'
));
$this
->
assertTrue
(
$orders
[
0
]
->
isRelationPopulated
(
'items'
));
...
...
@@ -447,9 +459,12 @@ trait ActiveRecordTestTrait
public
function
testFindLazyVia
()
{
/** @var \yii\db\ActiveRecordInterface $orderClass */
$orderClass
=
$this
->
getOrderClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
/** @var Order $order */
$order
=
$
this
->
callOrderF
ind
(
1
);
$order
=
$
orderClass
::
f
ind
(
1
);
$this
->
assertEquals
(
1
,
$order
->
id
);
$this
->
assertEquals
(
2
,
count
(
$order
->
items
));
$this
->
assertEquals
(
1
,
$order
->
items
[
0
]
->
id
);
...
...
@@ -458,17 +473,23 @@ trait ActiveRecordTestTrait
public
function
testFindLazyVia2
()
{
/** @var \yii\db\ActiveRecordInterface $orderClass */
$orderClass
=
$this
->
getOrderClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
/** @var Order $order */
$order
=
$
this
->
callOrderF
ind
(
1
);
$order
=
$
orderClass
::
f
ind
(
1
);
$order
->
id
=
100
;
$this
->
assertEquals
([],
$order
->
items
);
}
public
function
testFindEagerViaRelation
()
{
/** @var \yii\db\ActiveRecordInterface $orderClass */
$orderClass
=
$this
->
getOrderClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
$orders
=
$
this
->
callOrderF
ind
()
->
with
(
'items'
)
->
orderBy
(
'id'
)
->
all
();
$orders
=
$
orderClass
::
f
ind
()
->
with
(
'items'
)
->
orderBy
(
'id'
)
->
all
();
$this
->
assertEquals
(
3
,
count
(
$orders
));
$order
=
$orders
[
0
];
$this
->
assertEquals
(
1
,
$order
->
id
);
...
...
@@ -480,8 +501,11 @@ trait ActiveRecordTestTrait
public
function
testFindNestedRelation
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
$customers
=
$
this
->
callCustomerF
ind
()
->
with
(
'orders'
,
'orders.items'
)
->
indexBy
(
'id'
)
->
all
();
$customers
=
$
customerClass
::
f
ind
()
->
with
(
'orders'
,
'orders.items'
)
->
indexBy
(
'id'
)
->
all
();
ksort
(
$customers
);
$this
->
assertEquals
(
3
,
count
(
$customers
));
$this
->
assertTrue
(
$customers
[
1
]
->
isRelationPopulated
(
'orders'
));
...
...
@@ -504,6 +528,9 @@ trait ActiveRecordTestTrait
*/
public
function
testFindEagerViaRelationPreserveOrder
()
{
/** @var \yii\db\ActiveRecordInterface $orderClass */
$orderClass
=
$this
->
getOrderClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
/*
...
...
@@ -536,7 +563,7 @@ trait ActiveRecordTestTrait
- itemsInOrder:
Item 3: 'Ice Age', 2
*/
$orders
=
$
this
->
callOrderF
ind
()
->
with
(
'itemsInOrder1'
)
->
orderBy
(
'created_at'
)
->
all
();
$orders
=
$
orderClass
::
f
ind
()
->
with
(
'itemsInOrder1'
)
->
orderBy
(
'created_at'
)
->
all
();
$this
->
assertEquals
(
3
,
count
(
$orders
));
$order
=
$orders
[
0
];
...
...
@@ -564,7 +591,10 @@ trait ActiveRecordTestTrait
// different order in via table
public
function
testFindEagerViaRelationPreserveOrderB
()
{
$orders
=
$this
->
callOrderFind
()
->
with
(
'itemsInOrder2'
)
->
orderBy
(
'created_at'
)
->
all
();
/** @var \yii\db\ActiveRecordInterface $orderClass */
$orderClass
=
$this
->
getOrderClass
();
$orders
=
$orderClass
::
find
()
->
with
(
'itemsInOrder2'
)
->
orderBy
(
'created_at'
)
->
all
();
$this
->
assertEquals
(
3
,
count
(
$orders
));
$order
=
$orders
[
0
];
...
...
@@ -591,10 +621,16 @@ trait ActiveRecordTestTrait
public
function
testLink
()
{
/** @var \yii\db\ActiveRecordInterface $orderClass */
/** @var \yii\db\ActiveRecordInterface $itemClass */
/** @var \yii\db\ActiveRecordInterface $orderItemClass */
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
$orderClass
=
$this
->
getOrderClass
();
$orderItemClass
=
$this
->
getOrderItemClass
();
$itemClass
=
$this
->
getItemClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
$customer
=
$
this
->
callCustomerF
ind
(
2
);
$customer
=
$
customerClass
::
f
ind
(
2
);
$this
->
assertEquals
(
2
,
count
(
$customer
->
orders
));
// has many
...
...
@@ -612,7 +648,7 @@ trait ActiveRecordTestTrait
$order
=
new
$orderClass
;
$order
->
total
=
100
;
$this
->
assertTrue
(
$order
->
isNewRecord
);
$customer
=
$
this
->
callCustomerF
ind
(
1
);
$customer
=
$
customerClass
::
f
ind
(
1
);
$this
->
assertNull
(
$order
->
customer
);
$order
->
link
(
'customer'
,
$customer
);
$this
->
assertFalse
(
$order
->
isNewRecord
);
...
...
@@ -620,17 +656,17 @@ trait ActiveRecordTestTrait
$this
->
assertEquals
(
1
,
$order
->
customer
->
primaryKey
);
// via model
$order
=
$
this
->
callOrderF
ind
(
1
);
$order
=
$
orderClass
::
f
ind
(
1
);
$this
->
assertEquals
(
2
,
count
(
$order
->
items
));
$this
->
assertEquals
(
2
,
count
(
$order
->
orderItems
));
$orderItem
=
$
this
->
callOrderItemF
ind
([
'order_id'
=>
1
,
'item_id'
=>
3
]);
$orderItem
=
$
orderItemClass
::
f
ind
([
'order_id'
=>
1
,
'item_id'
=>
3
]);
$this
->
assertNull
(
$orderItem
);
$item
=
$
this
->
callItemF
ind
(
3
);
$item
=
$
itemClass
::
f
ind
(
3
);
$order
->
link
(
'items'
,
$item
,
[
'quantity'
=>
10
,
'subtotal'
=>
100
]);
$this
->
afterSave
();
$this
->
assertEquals
(
3
,
count
(
$order
->
items
));
$this
->
assertEquals
(
3
,
count
(
$order
->
orderItems
));
$orderItem
=
$
this
->
callOrderItemF
ind
([
'order_id'
=>
1
,
'item_id'
=>
3
]);
$orderItem
=
$
orderItemClass
::
f
ind
([
'order_id'
=>
1
,
'item_id'
=>
3
]);
$this
->
assertTrue
(
$orderItem
instanceof
$orderItemClass
);
$this
->
assertEquals
(
10
,
$orderItem
->
quantity
);
$this
->
assertEquals
(
100
,
$orderItem
->
subtotal
);
...
...
@@ -638,17 +674,22 @@ trait ActiveRecordTestTrait
public
function
testUnlink
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var \yii\db\ActiveRecordInterface $orderClass */
$orderClass
=
$this
->
getOrderClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
// has many
$customer
=
$
this
->
callCustomerF
ind
(
2
);
$customer
=
$
customerClass
::
f
ind
(
2
);
$this
->
assertEquals
(
2
,
count
(
$customer
->
orders
));
$customer
->
unlink
(
'orders'
,
$customer
->
orders
[
1
],
true
);
$this
->
afterSave
();
$this
->
assertEquals
(
1
,
count
(
$customer
->
orders
));
$this
->
assertNull
(
$
this
->
callOrderF
ind
(
3
));
$this
->
assertNull
(
$
orderClass
::
f
ind
(
3
));
// via model
$order
=
$
this
->
callOrderF
ind
(
2
);
$order
=
$
orderClass
::
f
ind
(
2
);
$this
->
assertEquals
(
3
,
count
(
$order
->
items
));
$this
->
assertEquals
(
3
,
count
(
$order
->
orderItems
));
$order
->
unlink
(
'items'
,
$order
->
items
[
2
],
true
);
...
...
@@ -662,6 +703,7 @@ trait ActiveRecordTestTrait
public
function
testInsert
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
$customer
=
new
$customerClass
;
...
...
@@ -685,10 +727,11 @@ trait ActiveRecordTestTrait
public
function
testUpdate
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
// save
$customer
=
$
this
->
callCustomerF
ind
(
2
);
$customer
=
$
customerClass
::
f
ind
(
2
);
$this
->
assertTrue
(
$customer
instanceof
$customerClass
);
$this
->
assertEquals
(
'user2'
,
$customer
->
name
);
$this
->
assertFalse
(
$customer
->
isNewRecord
);
...
...
@@ -702,16 +745,16 @@ trait ActiveRecordTestTrait
$this
->
assertFalse
(
$customer
->
isNewRecord
);
$this
->
assertFalse
(
static
::
$afterSaveNewRecord
);
$this
->
assertFalse
(
static
::
$afterSaveInsert
);
$customer2
=
$
this
->
callCustomerF
ind
(
2
);
$customer2
=
$
customerClass
::
f
ind
(
2
);
$this
->
assertEquals
(
'user2x'
,
$customer2
->
name
);
// updateAll
$customer
=
$
this
->
callCustomerF
ind
(
3
);
$customer
=
$
customerClass
::
f
ind
(
3
);
$this
->
assertEquals
(
'user3'
,
$customer
->
name
);
$ret
=
$customerClass
::
updateAll
([
'name'
=>
'temp'
],
[
'id'
=>
3
]);
$this
->
afterSave
();
$this
->
assertEquals
(
1
,
$ret
);
$customer
=
$
this
->
callCustomerF
ind
(
3
);
$customer
=
$
customerClass
::
f
ind
(
3
);
$this
->
assertEquals
(
'temp'
,
$customer
->
name
);
$ret
=
$customerClass
::
updateAll
([
'name'
=>
'tempX'
]);
...
...
@@ -725,10 +768,11 @@ trait ActiveRecordTestTrait
public
function
testUpdateAttributes
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
// save
$customer
=
$
this
->
callCustomerF
ind
(
2
);
$customer
=
$
customerClass
::
f
ind
(
2
);
$this
->
assertTrue
(
$customer
instanceof
$customerClass
);
$this
->
assertEquals
(
'user2'
,
$customer
->
name
);
$this
->
assertFalse
(
$customer
->
isNewRecord
);
...
...
@@ -741,10 +785,10 @@ trait ActiveRecordTestTrait
$this
->
assertFalse
(
$customer
->
isNewRecord
);
$this
->
assertFalse
(
static
::
$afterSaveNewRecord
);
$this
->
assertFalse
(
static
::
$afterSaveInsert
);
$customer2
=
$
this
->
callCustomerF
ind
(
2
);
$customer2
=
$
customerClass
::
f
ind
(
2
);
$this
->
assertEquals
(
'user2x'
,
$customer2
->
name
);
$customer
=
$
this
->
callCustomerF
ind
(
1
);
$customer
=
$
customerClass
::
f
ind
(
1
);
$this
->
assertEquals
(
'user1'
,
$customer
->
name
);
$this
->
assertEquals
(
1
,
$customer
->
status
);
$customer
->
name
=
'user1x'
;
...
...
@@ -752,29 +796,30 @@ trait ActiveRecordTestTrait
$customer
->
updateAttributes
([
'name'
]);
$this
->
assertEquals
(
'user1x'
,
$customer
->
name
);
$this
->
assertEquals
(
2
,
$customer
->
status
);
$customer
=
$
this
->
callCustomerF
ind
(
1
);
$customer
=
$
customerClass
::
f
ind
(
1
);
$this
->
assertEquals
(
'user1x'
,
$customer
->
name
);
$this
->
assertEquals
(
1
,
$customer
->
status
);
}
public
function
testUpdateCounters
()
{
/** @var \yii\db\ActiveRecordInterface $orderItemClass */
$orderItemClass
=
$this
->
getOrderItemClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
// updateCounters
$pk
=
[
'order_id'
=>
2
,
'item_id'
=>
4
];
$orderItem
=
$
this
->
callOrderItemF
ind
(
$pk
);
$orderItem
=
$
orderItemClass
::
f
ind
(
$pk
);
$this
->
assertEquals
(
1
,
$orderItem
->
quantity
);
$ret
=
$orderItem
->
updateCounters
([
'quantity'
=>
-
1
]);
$this
->
afterSave
();
$this
->
assertEquals
(
1
,
$ret
);
$this
->
assertEquals
(
0
,
$orderItem
->
quantity
);
$orderItem
=
$
this
->
callOrderItemF
ind
(
$pk
);
$orderItem
=
$
orderItemClass
::
f
ind
(
$pk
);
$this
->
assertEquals
(
0
,
$orderItem
->
quantity
);
// updateAllCounters
$pk
=
[
'order_id'
=>
1
,
'item_id'
=>
2
];
$orderItem
=
$
this
->
callOrderItemF
ind
(
$pk
);
$orderItem
=
$
orderItemClass
::
f
ind
(
$pk
);
$this
->
assertEquals
(
2
,
$orderItem
->
quantity
);
$ret
=
$orderItemClass
::
updateAllCounters
([
'quantity'
=>
3
,
...
...
@@ -782,31 +827,32 @@ trait ActiveRecordTestTrait
],
$pk
);
$this
->
afterSave
();
$this
->
assertEquals
(
1
,
$ret
);
$orderItem
=
$
this
->
callOrderItemF
ind
(
$pk
);
$orderItem
=
$
orderItemClass
::
f
ind
(
$pk
);
$this
->
assertEquals
(
5
,
$orderItem
->
quantity
);
$this
->
assertEquals
(
30
,
$orderItem
->
subtotal
);
}
public
function
testDelete
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
// delete
$customer
=
$
this
->
callCustomerF
ind
(
2
);
$customer
=
$
customerClass
::
f
ind
(
2
);
$this
->
assertTrue
(
$customer
instanceof
$customerClass
);
$this
->
assertEquals
(
'user2'
,
$customer
->
name
);
$customer
->
delete
();
$this
->
afterSave
();
$customer
=
$
this
->
callCustomerF
ind
(
2
);
$customer
=
$
customerClass
::
f
ind
(
2
);
$this
->
assertNull
(
$customer
);
// deleteAll
$customers
=
$
this
->
callCustomerF
ind
()
->
all
();
$customers
=
$
customerClass
::
f
ind
()
->
all
();
$this
->
assertEquals
(
2
,
count
(
$customers
));
$ret
=
$customerClass
::
deleteAll
();
$this
->
afterSave
();
$this
->
assertEquals
(
2
,
$ret
);
$customers
=
$
this
->
callCustomerF
ind
()
->
all
();
$customers
=
$
customerClass
::
f
ind
()
->
all
();
$this
->
assertEquals
(
0
,
count
(
$customers
));
$ret
=
$customerClass
::
deleteAll
();
...
...
@@ -820,6 +866,7 @@ trait ActiveRecordTestTrait
*/
public
function
testBooleanAttribute
()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var TestCase|ActiveRecordTestTrait $this */
$customer
=
new
$customerClass
();
...
...
@@ -837,16 +884,16 @@ trait ActiveRecordTestTrait
$customer
->
refresh
();
$this
->
assertEquals
(
0
,
$customer
->
status
);
$customers
=
$
this
->
callCustomerF
ind
()
->
where
([
'status'
=>
true
])
->
all
();
$customers
=
$
customerClass
::
f
ind
()
->
where
([
'status'
=>
true
])
->
all
();
$this
->
assertEquals
(
2
,
count
(
$customers
));
$customers
=
$
this
->
callCustomerF
ind
()
->
where
([
'status'
=>
false
])
->
all
();
$customers
=
$
customerClass
::
f
ind
()
->
where
([
'status'
=>
false
])
->
all
();
$this
->
assertEquals
(
1
,
count
(
$customers
));
}
public
function
testAfterFind
()
{
/** @var
BaseActiveRecord
$customerClass */
/** @var
\yii\db\ActiveRecordInterface
$customerClass */
$customerClass
=
$this
->
getCustomerClass
();
/** @var BaseActiveRecord $orderClass */
$orderClass
=
$this
->
getOrderClass
();
...
...
@@ -859,22 +906,22 @@ trait ActiveRecordTestTrait
$afterFindCalls
[]
=
[
get_class
(
$ar
),
$ar
->
getIsNewRecord
(),
$ar
->
getPrimaryKey
(),
$ar
->
isRelationPopulated
(
'orders'
)];
});
$customer
=
$
this
->
callCustomerF
ind
(
1
);
$customer
=
$
customerClass
::
f
ind
(
1
);
$this
->
assertNotNull
(
$customer
);
$this
->
assertEquals
([[
$customerClass
,
false
,
1
,
false
]],
$afterFindCalls
);
$afterFindCalls
=
[];
$customer
=
$
this
->
callCustomerF
ind
()
->
where
([
'id'
=>
1
])
->
one
();
$customer
=
$
customerClass
::
f
ind
()
->
where
([
'id'
=>
1
])
->
one
();
$this
->
assertNotNull
(
$customer
);
$this
->
assertEquals
([[
$customerClass
,
false
,
1
,
false
]],
$afterFindCalls
);
$afterFindCalls
=
[];
$customer
=
$
this
->
callCustomerF
ind
()
->
where
([
'id'
=>
1
])
->
all
();
$customer
=
$
customerClass
::
f
ind
()
->
where
([
'id'
=>
1
])
->
all
();
$this
->
assertNotNull
(
$customer
);
$this
->
assertEquals
([[
$customerClass
,
false
,
1
,
false
]],
$afterFindCalls
);
$afterFindCalls
=
[];
$customer
=
$
this
->
callCustomerF
ind
()
->
where
([
'id'
=>
1
])
->
with
(
'orders'
)
->
all
();
$customer
=
$
customerClass
::
f
ind
()
->
where
([
'id'
=>
1
])
->
with
(
'orders'
)
->
all
();
$this
->
assertNotNull
(
$customer
);
$this
->
assertEquals
([
[
$this
->
getOrderClass
(),
false
,
1
,
false
],
...
...
@@ -883,10 +930,10 @@ trait ActiveRecordTestTrait
$afterFindCalls
=
[];
if
(
$this
instanceof
\yiiunit\extensions\redis\ActiveRecordTest
)
{
// TODO redis does not support orderBy() yet
$customer
=
$
this
->
callCustomerF
ind
()
->
where
([
'id'
=>
[
1
,
2
]])
->
with
(
'orders'
)
->
all
();
$customer
=
$
customerClass
::
f
ind
()
->
where
([
'id'
=>
[
1
,
2
]])
->
with
(
'orders'
)
->
all
();
}
else
{
// orderBy is needed to avoid random test failure
$customer
=
$
this
->
callCustomerF
ind
()
->
where
([
'id'
=>
[
1
,
2
]])
->
with
(
'orders'
)
->
orderBy
(
'name'
)
->
all
();
$customer
=
$
customerClass
::
f
ind
()
->
where
([
'id'
=>
[
1
,
2
]])
->
with
(
'orders'
)
->
orderBy
(
'name'
)
->
all
();
}
$this
->
assertNotNull
(
$customer
);
$this
->
assertEquals
([
...
...
tests/unit/framework/db/ActiveRecordTest.php
View file @
f7a6cb9f
...
...
@@ -26,26 +26,6 @@ class ActiveRecordTest extends DatabaseTestCase
ActiveRecord
::
$db
=
$this
->
getConnection
();
}
public
function
callCustomerFind
(
$q
=
null
)
{
return
Customer
::
find
(
$q
);
}
public
function
callOrderFind
(
$q
=
null
)
{
return
Order
::
find
(
$q
);
}
public
function
callOrderItemFind
(
$q
=
null
)
{
return
OrderItem
::
find
(
$q
);
}
public
function
callItemFind
(
$q
=
null
)
{
return
Item
::
find
(
$q
);
}
public
function
getCustomerClass
()
{
return
Customer
::
className
();
...
...
@@ -69,7 +49,7 @@ class ActiveRecordTest extends DatabaseTestCase
public
function
testCustomColumns
()
{
// find custom column
$customer
=
$this
->
callCustomerF
ind
()
->
select
([
'*'
,
'(status*2) AS status2'
])
$customer
=
Customer
::
f
ind
()
->
select
([
'*'
,
'(status*2) AS status2'
])
->
where
([
'name'
=>
'user3'
])
->
one
();
$this
->
assertEquals
(
3
,
$customer
->
id
);
$this
->
assertEquals
(
4
,
$customer
->
status2
);
...
...
@@ -78,19 +58,19 @@ class ActiveRecordTest extends DatabaseTestCase
public
function
testStatisticalFind
()
{
// find count, sum, average, min, max, scalar
$this
->
assertEquals
(
3
,
$this
->
callCustomerF
ind
()
->
count
());
$this
->
assertEquals
(
2
,
$this
->
callCustomerF
ind
()
->
where
(
'id=1 OR id=2'
)
->
count
());
$this
->
assertEquals
(
6
,
$this
->
callCustomerF
ind
()
->
sum
(
'id'
));
$this
->
assertEquals
(
2
,
$this
->
callCustomerF
ind
()
->
average
(
'id'
));
$this
->
assertEquals
(
1
,
$this
->
callCustomerF
ind
()
->
min
(
'id'
));
$this
->
assertEquals
(
3
,
$this
->
callCustomerF
ind
()
->
max
(
'id'
));
$this
->
assertEquals
(
3
,
$this
->
callCustomerF
ind
()
->
select
(
'COUNT(*)'
)
->
scalar
());
$this
->
assertEquals
(
3
,
Customer
::
f
ind
()
->
count
());
$this
->
assertEquals
(
2
,
Customer
::
f
ind
()
->
where
(
'id=1 OR id=2'
)
->
count
());
$this
->
assertEquals
(
6
,
Customer
::
f
ind
()
->
sum
(
'id'
));
$this
->
assertEquals
(
2
,
Customer
::
f
ind
()
->
average
(
'id'
));
$this
->
assertEquals
(
1
,
Customer
::
f
ind
()
->
min
(
'id'
));
$this
->
assertEquals
(
3
,
Customer
::
f
ind
()
->
max
(
'id'
));
$this
->
assertEquals
(
3
,
Customer
::
f
ind
()
->
select
(
'COUNT(*)'
)
->
scalar
());
}
public
function
testFindScalar
()
{
// query scalar
$customerName
=
$this
->
callCustomerF
ind
()
->
where
([
'id'
=>
2
])
->
select
(
'name'
)
->
scalar
();
$customerName
=
Customer
::
f
ind
()
->
where
([
'id'
=>
2
])
->
select
(
'name'
)
->
scalar
();
$this
->
assertEquals
(
'user2'
,
$customerName
);
}
...
...
@@ -168,7 +148,7 @@ class ActiveRecordTest extends DatabaseTestCase
public
function
testDeeplyNestedTableRelation
()
{
/** @var Customer $customer */
$customer
=
$this
->
callCustomerF
ind
(
1
);
$customer
=
Customer
::
f
ind
(
1
);
$this
->
assertNotNull
(
$customer
);
$items
=
$customer
->
orderItems
;
...
...
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