From bebf17a1c4a253498e84bd00584db7a6ee4aa810 Mon Sep 17 00:00:00 2001
From: Esa-Matti Suuronen <esa-matti@suuronen.org>
Date: Wed, 30 Sep 2020 18:39:50 +0300
Subject: [PATCH] Add preview tests

---
 tests/wpunit/PostPreviewQueryTest.php | 119 ++++++++++++++++++++++++++
 1 file changed, 119 insertions(+)
 create mode 100644 tests/wpunit/PostPreviewQueryTest.php

diff --git a/tests/wpunit/PostPreviewQueryTest.php b/tests/wpunit/PostPreviewQueryTest.php
new file mode 100644
index 0000000..5c4049d
--- /dev/null
+++ b/tests/wpunit/PostPreviewQueryTest.php
@@ -0,0 +1,119 @@
+<?php
+
+// XXX: Can we autoload this somehow?
+require_once __DIR__ . '/PolylangUnitTestCase.php';
+
+class PostObjectQueryTest extends PolylangUnitTestCase
+{
+    static function wpSetUpBeforeClass()
+    {
+        parent::wpSetUpBeforeClass();
+
+        self::set_default_language('en_US');
+        self::create_language('en_US');
+        self::create_language('fr_FR');
+        self::create_language('fi');
+        self::create_language('de_DE_formal');
+        self::create_language('es_ES');
+    }
+
+    public function setUp(): void
+    {
+        parent::setUp();
+    }
+
+    public function testCanHaveLanguageField()
+    {
+        $post_id = $this->factory()->post->create([
+            'post_title' => 'Original post',
+            'post_content' => '',
+            'post_type' => 'post',
+            'post_status' => 'publish',
+        ]);
+        pll_set_post_language($post_id, 'fi');
+
+        $preview_id = $this->factory()->post->create([
+            'post_title' => 'Preview post',
+            'post_content' => 'Preview Content',
+            'post_type' => 'revision',
+            'post_status' => 'inherit',
+            'post_parent' => $post_id,
+        ]);
+        pll_set_post_language($preview_id, 'en');
+
+        $query = "
+        query Preview {
+            post(id: \"$post_id\", idType: DATABASE_ID, asPreview: true) {
+                title
+                language {
+                    code
+                }
+            }
+         }
+        ";
+
+        wp_set_current_user(1);
+        $result = do_graphql_request($query);
+        $this->assertArrayNotHasKey('errors', $result, print_r($result, true));
+        $this->assertEquals($result['data']['post']['language']['code'], 'EN');
+    }
+
+    public function testCanFetchTranslatedVersions()
+    {
+        $fi_post_id = wp_insert_post([
+            'post_title' => 'Finnish post version',
+            'post_content' => '',
+            'post_type' => 'post',
+            'post_status' => 'publish',
+        ]);
+        pll_set_post_language($fi_post_id, 'fi');
+
+        $en_post_id = wp_insert_post([
+            'post_title' => 'English post version',
+            'post_content' => '',
+            'post_type' => 'post',
+            'post_status' => 'publish',
+        ]);
+        pll_set_post_language($en_post_id, 'en');
+
+        pll_save_post_translations([
+            'en' => $en_post_id,
+            'fi' => $fi_post_id,
+        ]);
+
+        $preview_id = $this->factory()->post->create([
+            'post_title' => 'Preview post',
+            'post_content' => 'Preview Content',
+            'post_type' => 'revision',
+            'post_status' => 'inherit',
+            'post_parent' => $en_post_id,
+        ]);
+
+        $query = "
+        query Preview {
+            post(id: \"$en_post_id\", idType: DATABASE_ID, asPreview: true) {
+                title
+                translations {
+                    title
+                }
+            }
+         }
+        ";
+
+        wp_set_current_user(1);
+        $data = do_graphql_request($query);
+        $this->assertArrayNotHasKey('errors', $data, print_r($data, true));
+        error_log(print_r($data, true));
+
+        $expected = [
+            'title' => 'Preview post',
+            'translations' => [
+                [
+                    'title' => 'Finnish post version',
+                ],
+            ],
+        ];
+
+        $this->assertEquals($expected, $data['data']['post']);
+    }
+}