tests/testthat/test-parse-object.R

library(rparse)

context("Parse Objects")

classes <- c("GameScore", "Movie", "Review")

if (parse_setup_test(classes, error = FALSE)) {
    p <- parse_object("GameScore", score = 1337, save_after = FALSE)

    test_that("parse_object creates an object with the appropriate types", {
        expect_is(p, "GameScore")
        expect_is(p, "parse_object")
        expect_is(p, "list")

        expect_equal(parse_class(p), "GameScore")
    })

    test_that("can save, retrieve and delete a parse_object", {
        saved <- parse_save(p)

        expect_true(!is.null(saved$objectId))

        retrieved <- parse_query("GameScore", saved$objectId)

        expect_is(retrieved, "GameScore")
        expect_is(retrieved, "parse_object")
        expect_equal(saved$objectId, retrieved$objectId)
        expect_equal(saved$score, retrieved$score)

        # delete
        parse_delete(saved)

        expect_error(parse_query("GameScore", saved$objectId), "object not found")
    })


    test_that("can save and delete a batch of objects", {
        d <- data.frame(cheat = c(FALSE, FALSE, TRUE), score = c(100, 200, 300))
        b <- as.parse_batch(d, "GameScore")

        expect_is(b, "parse_batch")

        b <- parse_save(b)

        ret <- parse_query("GameScore", score = 200)
        expect_equal(nrow(ret), 1)

        parse_delete(b)

        ret2 <- parse_query("GameScore", score = 200)
        expect_equal(length(ret2), 0)

        # clean up by removing all GameScore
        parse_delete_all("GameScore")
    })


    test_that("can update an object or batch of objects", {
        score <- parse_object("GameScore", cheat = FALSE, score = 1337)
        expect_equal(parse_query("GameScore")$score, 1337)

        score$score <- 999
        parse_save(score)
        expect_equal(parse_query("GameScore")$score, 999)

        parse_delete(score)

        # batch
        d <- data.frame(cheat = c(FALSE, FALSE, TRUE), score = c(100, 200, 300))
        scores <- parse_save(d, "GameScore")
        expect_equal(d$score, scores$score)

        retrieved <- parse_query("GameScore")
        expect_equal(sort(d$score), sort(retrieved$score))

        # add one and update
        retrieved$score <- retrieved$score + 1
        parse_save(retrieved)

        retrieved2 <- parse_query("GameScore")
        expect_equal(sort(d$score + 1), sort(retrieved2$score))

        parse_delete_all("GameScore")
    })


    test_that("can save an object with a pointer to another object", {
        the_matrix <- parse_object("Movie", title = "The Matrix")

        review <- parse_object("Review", movie = the_matrix,
                               stars = 5,
                               text = "Too bad they never made any sequels")

        retrieved_review <- parse_query("Review", stars = 5)
        expect_equal(retrieved_review$movie$objectId, the_matrix$objectId)
    })

    parse_restore_state(classes)
}
dgrtwo/rparse documentation built on May 15, 2019, 7:28 a.m.