sapling/tests/test-fb-hgext-diff-since-last-arc-diff.t
Ryan McElroy 297c6ce041 phabstatus: remove O(n^2) double loop
Summary:
This was unneeded. We can just populate the dict directly.
Note that now we catch any errors in the expected data format gracefully
and no longer stack trace with bad inputs.

Reviewed By: DurhamG

Differential Revision: D6826455

fbshipit-source-id: adc9cc1fc4895f3c67b112d914f566601336ce3b
2018-04-13 21:51:07 -07:00

108 lines
3.1 KiB
Perl

Load extensions
$ cat >> $HGRCPATH << EOF
> [extensions]
> arcconfig=$TESTDIR/../hgext/extlib/phabricator/arcconfig.py
> arcdiff=
> EOF
Diff with no revision
$ hg init repo
$ cd repo
$ touch foo
$ hg add foo
$ hg ci -qm 'No rev'
$ hg diff --since-last-arc-diff
abort: local changeset is not associated with a differential revision
[255]
Fake a diff
$ echo bleet > foo
$ hg ci -qm 'Differential Revision: https://phabricator.fb.com/D1'
$ hg diff --since-last-arc-diff
abort: no .arcconfig found
[255]
Prep configuration
$ echo '{}' > .arcrc
$ echo '{"config" : {"default" : "https://a.com/api"}, "hosts" : {"https://a.com/api/" : { "user" : "testuser", "cert" : "garbage_cert"}}}' > .arcconfig
Now progressively test the response handling for variations of missing data
$ cat > $TESTTMP/mockduit << EOF
> [{}]
> EOF
$ HG_ARC_CONDUIT_MOCK=$TESTTMP/mockduit hg diff --since-last-arc-diff
Error calling graphql: Unexpected graphql response format
abort: unable to determine previous changeset hash
[255]
$ cat > $TESTTMP/mockduit << EOF
> [{"data": {"query": [{"results": {"nodes": [{
> "number": 1,
> "diff_status_name": "Needs Review",
> "differential_diffs": {"count": 3}
> }]}}]}}]
> EOF
$ HG_ARC_CONDUIT_MOCK=$TESTTMP/mockduit hg diff --since-last-arc-diff
abort: unable to determine previous changeset hash
[255]
$ cat > $TESTTMP/mockduit << EOF
> [{"data": {"query": [{"results": {"nodes": [{
> "number": 1,
> "diff_status_name": "Needs Review"
> }]}}]}}]
> EOF
$ HG_ARC_CONDUIT_MOCK=$TESTTMP/mockduit hg diff --since-last-arc-diff
abort: unable to determine previous changeset hash
[255]
This is the case when the diff is up to date with the current commit;
there is no diff since what was landed.
$ cat > $TESTTMP/mockduit << EOF
> [{"data": {"query": [{"results": {"nodes": [{
> "number": 1,
> "diff_status_name": "Needs Review",
> "latest_active_diff": {
> "local_commit_info": {
> "nodes": [
> {"property_value": "{\"lolwut\": {\"time\": 0, \"commit\": \"2e6531b7dada2a3e5638e136de05f51e94a427f4\"}}"}
> ]
> }
> },
> "differential_diffs": {"count": 1}
> }]}}]}}]
> EOF
$ HG_ARC_CONDUIT_MOCK=$TESTTMP/mockduit hg diff --since-last-arc-diff
This is the case when the diff points at our parent commit, we expect to
see the bleet text show up. There's a fake hash that I've injected into
the commit list returned from our mocked phabricator; it is present to
assert that we order the commits consistently based on the time field.
$ cat > $TESTTMP/mockduit << EOF
> [{"data": {"query": [{"results": {"nodes": [{
> "number": 1,
> "diff_status_name": "Needs Review",
> "latest_active_diff": {
> "local_commit_info": {
> "nodes": [
> {"property_value": "{\"lolwut\": {\"time\": 0, \"commit\": \"88dd5a13bf28b99853a24bddfc93d4c44e07c6bd\"}}"}
> ]
> }
> },
> "differential_diffs": {"count": 1}
> }]}}]}}]
> EOF
$ HG_ARC_CONDUIT_MOCK=$TESTTMP/mockduit hg diff --since-last-arc-diff --nodates
diff -r 88dd5a13bf28 foo
--- a/foo
+++ b/foo
@@ -0,0 +1,1 @@
+bleet