Skip to content

Commit f14f5e9

Browse files
authored
Merge pull request #296 from zapcannon87/developer
feat(storage): operation for key path
2 parents 4542f89 + 1828f42 commit f14f5e9

File tree

3 files changed

+257
-192
lines changed

3 files changed

+257
-192
lines changed

LeanCloudTests/LCObjectTestCase.swift

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,66 @@ class LCObjectTestCase: BaseTestCase {
507507
XCTAssertEqual(object[dictionaryKey]?.dictionaryValue?["1"] as? String, "a")
508508
XCTAssertEqual(object[dictionaryKey]?.dictionaryValue?["2"] as? Double, 42)
509509
}
510+
511+
func testKeyPath() {
512+
do {
513+
let object = self.object()
514+
try object.set("foo.bar", value: 1)
515+
XCTFail()
516+
} catch {
517+
XCTAssertTrue(error is LCError)
518+
}
519+
520+
let object = self.object()
521+
object.dictionaryField = LCDictionary([
522+
"number": 1,
523+
"foo": "foo",
524+
"foos": ["bar"],
525+
"unset": "unset"])
526+
object.stringField = "string literal"
527+
XCTAssertTrue(object.save().isSuccess)
528+
529+
do {
530+
try object.increase("dictionaryField.number")
531+
try object.set("dictionaryField.foo", value: "bar")
532+
try object.unset("dictionaryField.unset")
533+
try object.append("dictionaryField.foos", element: "bars")
534+
try object.remove("dictionaryField.foos", element: "bar")
535+
try object.append("dictionaryField.foos", element: "bar", unique: true)
536+
XCTAssertTrue(object.save().isSuccess)
537+
let dictionaryField = object.dictionaryField as? LCDictionary
538+
XCTAssertNil(dictionaryField?.unset)
539+
XCTAssertEqual(dictionaryField?.number as? LCNumber, LCNumber(2))
540+
XCTAssertEqual(dictionaryField?.foo as? LCString, LCString("bar"))
541+
XCTAssertEqual(dictionaryField?.foos as? LCArray, LCArray(["bars", "bar"]))
542+
XCTAssertNil(object["dictionaryField.number"])
543+
XCTAssertNil(object["dictionaryField.unset"])
544+
XCTAssertNil(object["dictionaryField.foo"])
545+
XCTAssertNil(object["dictionaryField.foos"])
546+
547+
let shadow = self.object(object.objectId)
548+
XCTAssertTrue(shadow.fetch().isSuccess)
549+
XCTAssertEqual(shadow.dictionaryField as? LCDictionary, dictionaryField)
550+
} catch {
551+
XCTFail("\(error)")
552+
}
553+
554+
do {
555+
try object.set("stringField.foo", value: "bar")
556+
XCTAssertNotNil(object.save().error)
557+
XCTAssertEqual(object.stringField as? LCString, LCString("string literal"))
558+
XCTAssertNil(object["stringField.foo"])
559+
} catch {
560+
XCTFail("\(error)")
561+
}
562+
563+
do {
564+
try object.insertRelation("dictionaryField.relation", object: self.object())
565+
XCTFail()
566+
} catch {
567+
XCTAssertTrue(error is LCError)
568+
}
569+
}
510570
}
511571

512572
class TestObject: LCObject {

0 commit comments

Comments
 (0)