Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ class AuthProviderTest {
// Assert that initial unauthorized request fails
assert(client.request { requestBuilder ->
requestBuilder.users().retrieveMeWithEditContext()
}.wpErrorCode() is WpErrorCode.Unauthorized)
}.wpErrorCode() == WpErrorCode.UNAUTHORIZED)

// Assert that request succeeds after setting `is_authorized = true`
dynamicAuthProvider.isAuthorized = true
Expand All @@ -80,7 +80,7 @@ class AuthProviderTest {
// Assert that request fails without authentication
assert(client.request { requestBuilder ->
requestBuilder.users().retrieveMeWithEditContext()
}.wpErrorCode() is WpErrorCode.Unauthorized)
}.wpErrorCode() == WpErrorCode.UNAUTHORIZED)

// Assert that request succeeds after authentication is modified
modifiableAuthenticationProvider.setAuthentication(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,6 @@ class BlockAutosavesEndpointTest {
val result = client.request { requestBuilder ->
requestBuilder.blockAutosaves().listWithEditContext(99999999L)
}
assert(result.wpErrorCode() is WpErrorCode.PostInvalidParent)
assertEquals(WpErrorCode.POST_INVALID_PARENT, result.wpErrorCode())
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package rs.wordpress.api.kotlin

import kotlin.test.assertEquals

import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Test
import uniffi.wp_api.BlockRendererPostParams
import uniffi.wp_api.WpErrorCode
import kotlin.test.assertTrue

class BlockRendererEndpointTest {
private val client = defaultApiClient()

Expand Down Expand Up @@ -41,7 +42,7 @@ class BlockRendererEndpointTest {
params = BlockRendererPostParams()
)
}
assert(result.wpErrorCode() is WpErrorCode.BlockInvalid)
assertEquals(WpErrorCode.BLOCK_INVALID, result.wpErrorCode())
}

@Test
Expand All @@ -52,6 +53,6 @@ class BlockRendererEndpointTest {
params = BlockRendererPostParams()
)
}
assert(result.wpErrorCode() is WpErrorCode.BlockInvalid)
assertEquals(WpErrorCode.BLOCK_INVALID, result.wpErrorCode())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,6 @@ class BlockRevisionsEndpointTest {
BlockRevisionListParams()
)
}
assert(result.wpErrorCode() is WpErrorCode.PostInvalidParent)
assertEquals(WpErrorCode.POST_INVALID_PARENT, result.wpErrorCode())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,6 @@ class BlockTypesEndpointTest {
val result = client.request { requestBuilder ->
requestBuilder.blockTypes().retrieveWithEditContext("nonexistent", "nonexistent")
}
assert(result.wpErrorCode() is WpErrorCode.BlockTypeInvalid)
assertEquals(WpErrorCode.BLOCK_TYPE_INVALID, result.wpErrorCode())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,6 @@ class BlocksEndpointTest {
BlockListParams(page = 99999999u)
)
}
assert(result.wpErrorCode() is WpErrorCode.PostInvalidPageNumber)
assertEquals(WpErrorCode.POST_INVALID_PAGE_NUMBER, result.wpErrorCode())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ class CategoriesEndpointTest {
termId = 9999999,
)
}
assert(result.wpErrorCode() is WpErrorCode.TermInvalid)
assertEquals(WpErrorCode.TERM_INVALID, result.wpErrorCode())
}

@Test
Expand All @@ -136,6 +136,6 @@ class CategoriesEndpointTest {
TermCreateParams(name = "foo", parent = 9999999)
)
}
assert(result.wpErrorCode() is WpErrorCode.TermInvalid)
assertEquals(WpErrorCode.TERM_INVALID, result.wpErrorCode())
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package rs.wordpress.api.kotlin

import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Test
import uniffi.wp_api.PostType
import uniffi.wp_api.WpErrorCode
import kotlin.test.assertEquals
import kotlin.test.assertNotNull

class ErrorCodeForwardCompatTest {
private val client = defaultApiClient()

@Test
fun testKnownErrorCodeHasValueAndRaw() = runTest {
// Trigger a known error: retrieving a non-existent post type
val result = client.request { requestBuilder ->
requestBuilder.postTypes().retrieveWithEditContext(PostType.Custom("nonexistent_type"))
}

val errorCodeValue = result.wpErrorCodeValue()
// `value` should be the known enum variant
assertEquals(WpErrorCode.TYPE_INVALID, errorCodeValue.value)
// `raw` should always contain the original API string
assertEquals("rest_type_invalid", errorCodeValue.raw)
}

@Test
fun testWpErrorCodeHelperReturnsKnownVariant() = runTest {
// The wpErrorCode() helper extracts .value for convenience
val result = client.request { requestBuilder ->
requestBuilder.postTypes().retrieveWithEditContext(PostType.Custom("nonexistent_type"))
}

// This is the migration path: use == instead of `is` for enum comparison
assertEquals(WpErrorCode.TYPE_INVALID, result.wpErrorCode())
}

@Test
fun testRawStringIsAlwaysAvailable() = runTest {
// Even for known error codes, the raw string is preserved.
// This is the forward-compat guarantee: if a client was written before
// a variant existed, they could check the raw string. After the variant
// is added, their raw string check still works.
val result = client.request { requestBuilder ->
requestBuilder.postTypes().retrieveWithEditContext(PostType.Custom("nonexistent_type"))
}

val errorCodeValue = result.wpErrorCodeValue()
assertNotNull(errorCodeValue.value, "Known error codes should have a value")
assertEquals("rest_type_invalid", errorCodeValue.raw)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import uniffi.wp_api.WpApiClientDelegate
import uniffi.wp_api.WpApiMiddlewarePipeline
import uniffi.wp_api.WpAuthenticationProvider
import uniffi.wp_api.WpErrorCode
import uniffi.wp_api.WpErrorCodeValue
import uniffi.wp_api.ParsedUrl
import uniffi.wp_mobile.MockPostService
import uniffi.wp_mobile.SiteInfo
Expand Down Expand Up @@ -94,7 +95,12 @@ fun <T> WpRequestResult<T>.assertSuccessAndRetrieveData(): T {
return (this as WpRequestResult.Success).response
}

fun <T> WpRequestResult<T>.wpErrorCode(): WpErrorCode {
fun <T> WpRequestResult<T>.wpErrorCode(): WpErrorCode? {
assert(this is WpRequestResult.WpError)
return (this as WpRequestResult.WpError).errorCode.value
}

fun <T> WpRequestResult<T>.wpErrorCodeValue(): WpErrorCodeValue {
assert(this is WpRequestResult.WpError)
return (this as WpRequestResult.WpError).errorCode
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package rs.wordpress.api.kotlin

import kotlin.test.assertEquals

import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Test
import uniffi.wp_api.WpErrorCode
import kotlin.test.assertNotNull
import kotlin.test.assertTrue

class MenuLocationsEndpointTest {
private val client = defaultApiClient()

Expand Down Expand Up @@ -33,6 +34,6 @@ class MenuLocationsEndpointTest {
requestBuilder.menuLocations()
.retrieveWithViewContext("invalid_location_that_does_not_exist")
}
assert(result.wpErrorCode() is WpErrorCode.MenuLocationInvalid)
assertEquals(WpErrorCode.MENU_LOCATION_INVALID, result.wpErrorCode())
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package rs.wordpress.api.kotlin

import kotlin.test.assertEquals

import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Assertions.assertNull
import org.junit.jupiter.api.Test
import uniffi.wp_api.NavMenuItemListParams
import uniffi.wp_api.SparseNavMenuItemFieldWithEditContext
import uniffi.wp_api.WpErrorCode
import kotlin.test.assertNotNull

class NavMenuItemsEndpointTest {
private val testCredentials = TestCredentials.INSTANCE
private val client = defaultApiClient()
Expand Down Expand Up @@ -66,6 +67,6 @@ class NavMenuItemsEndpointTest {
client.request { requestBuilder ->
requestBuilder.navMenuItems().listWithEditContext(params)
}
assert(result.wpErrorCode() is WpErrorCode.PostInvalidPageNumber)
assertEquals(WpErrorCode.POST_INVALID_PAGE_NUMBER, result.wpErrorCode())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ class PagesEndpointTest {
client.request { requestBuilder ->
requestBuilder.posts().listWithEditContext(PostEndpointType.Pages, params)
}
assert(result.wpErrorCode() is WpErrorCode.PostInvalidPageNumber)
assertEquals(WpErrorCode.POST_INVALID_PAGE_NUMBER, result.wpErrorCode())
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,14 +92,14 @@ class PluginsEndpointTest {
)
)
}
assert(result.wpErrorCode() is WpErrorCode.CannotInstallPlugin)
assertEquals(WpErrorCode.CANNOT_INSTALL_PLUGIN, result.wpErrorCode())
}

@Test
fun testDeletePluginErrCannotDeleteActivePlugin() = runTest {
val result = client.request { requestBuilder ->
requestBuilder.plugins().delete(PluginSlug(HELLO_DOLLY_PLUGIN_SLUG))
}
assert(result.wpErrorCode() is WpErrorCode.CannotDeleteActivePlugin)
assertEquals(WpErrorCode.CANNOT_DELETE_ACTIVE_PLUGIN, result.wpErrorCode())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,15 +63,15 @@ class PostStatusesEndpointTest {
requestBuilder.postStatuses()
.retrieveWithViewContext(PostStatusSlug("non_existent_status"))
}
assert(result.wpErrorCode() is WpErrorCode.StatusInvalid)
assertEquals(WpErrorCode.STATUS_INVALID, result.wpErrorCode())
}

@Test
fun testPostStatusesErrCannotReadStatus() = runTest {
val result = client.request { requestBuilder ->
requestBuilder.postStatuses().retrieveWithViewContext(PostStatusSlug("auto-draft"))
}
assert(result.wpErrorCode() is WpErrorCode.CannotReadStatus)
assertEquals(WpErrorCode.CANNOT_READ_STATUS, result.wpErrorCode())
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,6 @@ class PostTypesEndpointTest {
val result = client.request { requestBuilder ->
requestBuilder.postTypes().retrieveWithEditContext(PostType.Custom("does_not_exist"))
}
assert(result.wpErrorCode() is WpErrorCode.TypeInvalid)
assertEquals(WpErrorCode.TYPE_INVALID, result.wpErrorCode())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ class PostsEndpointTest {
client.request { requestBuilder ->
requestBuilder.posts().listWithEditContext(PostEndpointType.Posts, params)
}
assert(result.wpErrorCode() is WpErrorCode.PostInvalidPageNumber)
assertEquals(WpErrorCode.POST_INVALID_PAGE_NUMBER, result.wpErrorCode())
}

@Test
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package rs.wordpress.api.kotlin

import kotlin.test.assertEquals

import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Test
import uniffi.wp_api.SidebarUpdateParams
import uniffi.wp_api.WpAuthenticationProvider
import uniffi.wp_api.WpErrorCode
import kotlin.test.assertTrue

class SidebarsEndpointTest {
private val testCredentials = TestCredentials.INSTANCE
private val client = defaultApiClient()
Expand Down Expand Up @@ -54,14 +55,14 @@ class SidebarsEndpointTest {
requestBuilder.sidebars()
.retrieveWithViewContext("nonexistent_sidebar_that_does_not_exist")
}
assert(result.wpErrorCode() is WpErrorCode.SidebarNotFound)
assertEquals(WpErrorCode.SIDEBAR_NOT_FOUND, result.wpErrorCode())
}

@Test
fun testSidebarsErrCannotManageWidgets() = runTest {
val result = clientAsSubscriber.request { requestBuilder ->
requestBuilder.sidebars().listWithEditContext()
}
assert(result.wpErrorCode() is WpErrorCode.CannotManageWidgets)
assertEquals(WpErrorCode.CANNOT_MANAGE_WIDGETS, result.wpErrorCode())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,6 @@ class TagsEndpointTest {
requestBuilder.terms()
.retrieveWithEditContext(TermEndpointType.Tags, 9999999)
}
assert(result.wpErrorCode() is WpErrorCode.TermInvalid)
assertEquals(WpErrorCode.TERM_INVALID, result.wpErrorCode())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,6 @@ class TemplatePartsEndpointTest {
requestBuilder.templateParts()
.delete(TEMPLATE_PART_TWENTY_TWENTY_FOUR_HEADER)
}
assert(result.wpErrorCode() is WpErrorCode.InvalidTemplate)
assertEquals(WpErrorCode.INVALID_TEMPLATE, result.wpErrorCode())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,6 @@ class TemplatesEndpointTest {
client.request { requestBuilder ->
requestBuilder.templates().delete(TEMPLATE_TWENTY_TWENTY_FOUR_SINGLE)
}
assert(result.wpErrorCode() is WpErrorCode.InvalidTemplate)
assertEquals(WpErrorCode.INVALID_TEMPLATE, result.wpErrorCode())
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package rs.wordpress.api.kotlin

import kotlin.test.assertEquals

import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Test
import uniffi.wp_api.SparseThemeFieldWithEditContext
Expand All @@ -8,7 +10,6 @@ import uniffi.wp_api.ThemeStylesheet
import uniffi.wp_api.WpErrorCode
import kotlin.test.assertNotNull
import kotlin.test.assertNull

private const val THEME_TWENTY_TWENTY_FIVE: String = "twentytwentyfive"

class ThemesEndpointTest {
Expand Down Expand Up @@ -67,6 +68,6 @@ class ThemesEndpointTest {
requestBuilder.themes()
.retrieveWithEditContext(ThemeStylesheet("invalid_stylesheet"))
}
assert(result.wpErrorCode() is WpErrorCode.ThemeNotFound)
assertEquals(WpErrorCode.THEME_NOT_FOUND, result.wpErrorCode())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ class UsersEndpointTest {
)
val result =
client.request { requestBuilder -> requestBuilder.users().listWithEditContext(params) }
assert(result.wpErrorCode() is WpErrorCode.InvalidParam)
assertEquals(WpErrorCode.INVALID_PARAM, result.wpErrorCode())
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ package rs.wordpress.api.kotlin

import uniffi.wp_api.RequestExecutionErrorReason
import uniffi.wp_api.RequestMethod
import uniffi.wp_api.WpErrorCode
import uniffi.wp_api.WpErrorCodeValue
import uniffi.wp_api.WpRedirect

sealed class WpRequestResult<T> {
data class Success<T>(val response: T) : WpRequestResult<T>()
data class WpError<T>(
val errorCode: WpErrorCode,
val errorCode: WpErrorCodeValue,
val errorMessage: String,
val statusCode: UInt,
val response: String,
Expand Down
Loading