mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2026-09-02 06:09:19 +00:00
Preserve UniqueGiftInfo constructor compatibility
This commit is contained in:
@@ -298,12 +298,6 @@ sealed interface GiftSentOrReceivedEvent : CommonEvent {
|
||||
override val gift: Gift.Unique,
|
||||
@SerialName(originField)
|
||||
override val originTyped: Origin? = null,
|
||||
@SerialName(textField)
|
||||
override val text: String? = null,
|
||||
@SerialName(entitiesField)
|
||||
private val entities: RawMessageEntities? = null,
|
||||
@SerialName(isPrivateField)
|
||||
override val isPrivate: Boolean = false,
|
||||
@Deprecated("Use lastResaleCurrency and lastResaleAmount instead")
|
||||
@SerialName(lastResaleStarCountField)
|
||||
override val lastResaleStarCount: Int? = null,
|
||||
@@ -314,7 +308,13 @@ sealed interface GiftSentOrReceivedEvent : CommonEvent {
|
||||
@SerialName(transferStarCountField)
|
||||
override val transferStarCount: Int? = null,
|
||||
@SerialName(nextTransferDateField)
|
||||
override val nextTransferDate: TelegramDate? = null
|
||||
override val nextTransferDate: TelegramDate? = null,
|
||||
@SerialName(textField)
|
||||
override val text: String? = null,
|
||||
@SerialName(entitiesField)
|
||||
private val entities: RawMessageEntities? = null,
|
||||
@SerialName(isPrivateField)
|
||||
override val isPrivate: Boolean = false
|
||||
) : UniqueGift {
|
||||
override val ownedGiftId: GiftId?
|
||||
get() = null
|
||||
@@ -329,25 +329,25 @@ sealed interface GiftSentOrReceivedEvent : CommonEvent {
|
||||
constructor(
|
||||
gift: Gift.Unique,
|
||||
origin: String?,
|
||||
text: String? = null,
|
||||
entities: RawMessageEntities? = null,
|
||||
isPrivate: Boolean = false,
|
||||
lastResaleStarCount: Int? = null,
|
||||
lastResaleCurrency: Currency? = null,
|
||||
lastResaleAmount: Long? = null,
|
||||
transferStarCount: Int? = null,
|
||||
nextTransferDate: TelegramDate? = null
|
||||
nextTransferDate: TelegramDate? = null,
|
||||
text: String? = null,
|
||||
entities: RawMessageEntities? = null,
|
||||
isPrivate: Boolean = false
|
||||
) : this(
|
||||
gift,
|
||||
origin ?.let { Origin.fromString(it) },
|
||||
text,
|
||||
entities,
|
||||
isPrivate,
|
||||
lastResaleStarCount,
|
||||
lastResaleCurrency,
|
||||
lastResaleAmount,
|
||||
transferStarCount,
|
||||
nextTransferDate
|
||||
gift = gift,
|
||||
originTyped = origin ?.let { Origin.fromString(it) },
|
||||
lastResaleStarCount = lastResaleStarCount,
|
||||
lastResaleCurrency = lastResaleCurrency,
|
||||
lastResaleAmount = lastResaleAmount,
|
||||
transferStarCount = transferStarCount,
|
||||
nextTransferDate = nextTransferDate,
|
||||
text = text,
|
||||
entities = entities,
|
||||
isPrivate = isPrivate
|
||||
)
|
||||
}
|
||||
|
||||
@@ -359,12 +359,6 @@ sealed interface GiftSentOrReceivedEvent : CommonEvent {
|
||||
override val ownedGiftId: GiftId,
|
||||
@SerialName(originField)
|
||||
override val originTyped: Origin? = null,
|
||||
@SerialName(textField)
|
||||
override val text: String? = null,
|
||||
@SerialName(entitiesField)
|
||||
private val entities: RawMessageEntities? = null,
|
||||
@SerialName(isPrivateField)
|
||||
override val isPrivate: Boolean = false,
|
||||
@Deprecated("Use lastResaleCurrency and lastResaleAmount instead")
|
||||
@SerialName(lastResaleStarCountField)
|
||||
override val lastResaleStarCount: Int? = null,
|
||||
@@ -375,7 +369,13 @@ sealed interface GiftSentOrReceivedEvent : CommonEvent {
|
||||
@SerialName(transferStarCountField)
|
||||
override val transferStarCount: Int? = null,
|
||||
@SerialName(nextTransferDateField)
|
||||
override val nextTransferDate: TelegramDate? = null
|
||||
override val nextTransferDate: TelegramDate? = null,
|
||||
@SerialName(textField)
|
||||
override val text: String? = null,
|
||||
@SerialName(entitiesField)
|
||||
private val entities: RawMessageEntities? = null,
|
||||
@SerialName(isPrivateField)
|
||||
override val isPrivate: Boolean = false
|
||||
) : UniqueGift, GiftSentOrReceivedEvent.ReceivedInBusinessAccount {
|
||||
@Transient
|
||||
override val origin: String? = originTyped ?.string
|
||||
@@ -388,26 +388,26 @@ sealed interface GiftSentOrReceivedEvent : CommonEvent {
|
||||
gift: Gift.Unique,
|
||||
ownedGiftId: GiftId,
|
||||
origin: String? = null,
|
||||
text: String? = null,
|
||||
entities: RawMessageEntities? = null,
|
||||
isPrivate: Boolean = false,
|
||||
lastResaleStarCount: Int? = null,
|
||||
lastResaleCurrency: Currency? = null,
|
||||
lastResaleAmount: Long? = null,
|
||||
transferStarCount: Int? = null,
|
||||
nextTransferDate: TelegramDate? = null
|
||||
nextTransferDate: TelegramDate? = null,
|
||||
text: String? = null,
|
||||
entities: RawMessageEntities? = null,
|
||||
isPrivate: Boolean = false
|
||||
) : this(
|
||||
gift = gift,
|
||||
ownedGiftId = ownedGiftId,
|
||||
originTyped = origin ?.let { Origin.fromString(it) },
|
||||
text = text,
|
||||
entities = entities,
|
||||
isPrivate = isPrivate,
|
||||
lastResaleStarCount = lastResaleStarCount,
|
||||
lastResaleCurrency = lastResaleCurrency,
|
||||
lastResaleAmount = lastResaleAmount,
|
||||
transferStarCount = transferStarCount,
|
||||
nextTransferDate = nextTransferDate
|
||||
nextTransferDate = nextTransferDate,
|
||||
text = text,
|
||||
entities = entities,
|
||||
isPrivate = isPrivate
|
||||
)
|
||||
}
|
||||
|
||||
@@ -420,12 +420,6 @@ sealed interface GiftSentOrReceivedEvent : CommonEvent {
|
||||
val ownedGiftId: GiftId? = null,
|
||||
@SerialName(originField)
|
||||
val origin: Origin? = null,
|
||||
@SerialName(textField)
|
||||
val text: String? = null,
|
||||
@SerialName(entitiesField)
|
||||
val entities: RawMessageEntities? = null,
|
||||
@SerialName(isPrivateField)
|
||||
val isPrivate: Boolean = false,
|
||||
@SerialName(lastResaleStarCountField)
|
||||
val lastResaleStarCount: Int? = null,
|
||||
@SerialName(lastResaleCurrencyField)
|
||||
@@ -435,7 +429,13 @@ sealed interface GiftSentOrReceivedEvent : CommonEvent {
|
||||
@SerialName(transferStarCountField)
|
||||
val transferStarCount: Int? = null,
|
||||
@SerialName(nextTransferDateField)
|
||||
val nextTransferDate: TelegramDate? = null
|
||||
val nextTransferDate: TelegramDate? = null,
|
||||
@SerialName(textField)
|
||||
val text: String? = null,
|
||||
@SerialName(entitiesField)
|
||||
val entities: RawMessageEntities? = null,
|
||||
@SerialName(isPrivateField)
|
||||
val isPrivate: Boolean = false
|
||||
)
|
||||
|
||||
override val descriptor: SerialDescriptor
|
||||
@@ -456,14 +456,14 @@ sealed interface GiftSentOrReceivedEvent : CommonEvent {
|
||||
Common(
|
||||
gift = surrogate.gift,
|
||||
originTyped = surrogate.origin,
|
||||
text = surrogate.text,
|
||||
entities = surrogate.entities,
|
||||
isPrivate = surrogate.isPrivate,
|
||||
lastResaleStarCount = surrogate.lastResaleStarCount,
|
||||
lastResaleCurrency = surrogate.lastResaleCurrency,
|
||||
lastResaleAmount = surrogate.lastResaleAmount,
|
||||
transferStarCount = surrogate.transferStarCount,
|
||||
nextTransferDate = surrogate.nextTransferDate
|
||||
nextTransferDate = surrogate.nextTransferDate,
|
||||
text = surrogate.text,
|
||||
entities = surrogate.entities,
|
||||
isPrivate = surrogate.isPrivate
|
||||
)
|
||||
}
|
||||
else -> {
|
||||
@@ -471,14 +471,14 @@ sealed interface GiftSentOrReceivedEvent : CommonEvent {
|
||||
gift = surrogate.gift,
|
||||
ownedGiftId = surrogate.ownedGiftId,
|
||||
originTyped = surrogate.origin,
|
||||
text = surrogate.text,
|
||||
entities = surrogate.entities,
|
||||
isPrivate = surrogate.isPrivate,
|
||||
lastResaleStarCount = surrogate.lastResaleStarCount,
|
||||
lastResaleCurrency = surrogate.lastResaleCurrency,
|
||||
lastResaleAmount = surrogate.lastResaleAmount,
|
||||
transferStarCount = surrogate.transferStarCount,
|
||||
nextTransferDate = surrogate.nextTransferDate
|
||||
nextTransferDate = surrogate.nextTransferDate,
|
||||
text = surrogate.text,
|
||||
entities = surrogate.entities,
|
||||
isPrivate = surrogate.isPrivate
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,12 +5,14 @@ import dev.inmo.tgbotapi.requests.send.SendRichMessageDraft
|
||||
import dev.inmo.tgbotapi.types.gifts.GiftSentOrReceivedEvent
|
||||
import dev.inmo.tgbotapi.types.communities.CommunityId
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ChatEventMessage
|
||||
import dev.inmo.tgbotapi.types.message.textsources.boldTextSource
|
||||
import dev.inmo.tgbotapi.types.rich.InputRichMessageHTML
|
||||
import dev.inmo.tgbotapi.types.update.MessageGenerationStoppedUpdate
|
||||
import dev.inmo.tgbotapi.types.update.MessageUpdate
|
||||
import dev.inmo.tgbotapi.types.update.abstracts.UpdateSerializerWithoutSerialization
|
||||
import dev.inmo.tgbotapi.utils.nonstrictJsonFormat
|
||||
import kotlinx.serialization.decodeFromString
|
||||
import kotlinx.serialization.encodeToString
|
||||
import kotlinx.serialization.json.Json
|
||||
import kotlinx.serialization.json.jsonObject
|
||||
import kotlin.test.Test
|
||||
@@ -71,4 +73,93 @@ class GeneralBotApi103Test {
|
||||
assertEquals(true, uniqueGift.isPrivate)
|
||||
assertEquals(1, uniqueGift.textSources.size)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `unique gift info preserves positional prefixes and round trips appended text fields`() {
|
||||
val uniqueGift = nonstrictJsonFormat.decodeFromString(
|
||||
GiftSentOrReceivedEvent.UniqueGift,
|
||||
"""{"gift":{"base_name":"Base","name":"unique","number":1,"model":{"name":"Model","sticker":{"file_id":"model-file","file_unique_id":"model-unique","type":"regular","width":1,"height":1},"rarity_per_mille":1},"symbol":{"name":"Symbol","sticker":{"file_id":"symbol-file","file_unique_id":"symbol-unique","type":"regular","width":1,"height":1},"rarity_per_mille":1},"backdrop":{"name":"Backdrop","colors":{"center_color":1,"edge_color":2,"symbol_color":3,"text_color":4},"rarity_per_mille":1}}}"""
|
||||
)
|
||||
|
||||
val commonPrimary = GiftSentOrReceivedEvent.UniqueGift.Common(
|
||||
uniqueGift.gift,
|
||||
GiftSentOrReceivedEvent.UniqueGift.Origin.Upgrade,
|
||||
1,
|
||||
"TON",
|
||||
2L,
|
||||
3,
|
||||
TelegramDate.Start
|
||||
)
|
||||
val commonSecondary = GiftSentOrReceivedEvent.UniqueGift.Common(
|
||||
uniqueGift.gift,
|
||||
"transfer",
|
||||
4,
|
||||
"USD",
|
||||
5L,
|
||||
6,
|
||||
TelegramDate.Start
|
||||
)
|
||||
val businessPrimary = GiftSentOrReceivedEvent.UniqueGift.ReceivedInBusinessAccount(
|
||||
uniqueGift.gift,
|
||||
GiftId("owned-primary"),
|
||||
GiftSentOrReceivedEvent.UniqueGift.Origin.Resale,
|
||||
7,
|
||||
"EUR",
|
||||
8L,
|
||||
9,
|
||||
TelegramDate.Start
|
||||
)
|
||||
val businessSecondary = GiftSentOrReceivedEvent.UniqueGift.ReceivedInBusinessAccount(
|
||||
uniqueGift.gift,
|
||||
GiftId("owned-secondary"),
|
||||
"offer",
|
||||
10,
|
||||
"XTR",
|
||||
11L,
|
||||
12,
|
||||
TelegramDate.Start
|
||||
)
|
||||
|
||||
assertEquals(3, commonPrimary.transferStarCount)
|
||||
assertEquals(6, commonSecondary.transferStarCount)
|
||||
assertEquals(9, businessPrimary.transferStarCount)
|
||||
assertEquals(12, businessSecondary.transferStarCount)
|
||||
|
||||
val publicFactoryCommon = GiftSentOrReceivedEvent.UniqueGift(
|
||||
uniqueGift.gift,
|
||||
"upgrade",
|
||||
null,
|
||||
13
|
||||
)
|
||||
val publicFactoryBusiness = GiftSentOrReceivedEvent.UniqueGift(
|
||||
uniqueGift.gift,
|
||||
"resale",
|
||||
GiftId("owned-factory"),
|
||||
14
|
||||
)
|
||||
|
||||
assertEquals(
|
||||
13,
|
||||
assertIs<GiftSentOrReceivedEvent.UniqueGift.Common>(publicFactoryCommon).transferStarCount
|
||||
)
|
||||
assertEquals(
|
||||
14,
|
||||
assertIs<GiftSentOrReceivedEvent.UniqueGift.ReceivedInBusinessAccount>(publicFactoryBusiness).transferStarCount
|
||||
)
|
||||
|
||||
val withAppendedFields = GiftSentOrReceivedEvent.UniqueGift(
|
||||
gift = uniqueGift.gift,
|
||||
text = "bold",
|
||||
textSources = listOf(boldTextSource("bold")),
|
||||
isPrivate = true
|
||||
)
|
||||
val roundTripped = nonstrictJsonFormat.decodeFromString(
|
||||
GiftSentOrReceivedEvent.UniqueGift,
|
||||
nonstrictJsonFormat.encodeToString(GiftSentOrReceivedEvent.UniqueGift, withAppendedFields)
|
||||
)
|
||||
|
||||
assertEquals("bold", roundTripped.text)
|
||||
assertEquals(true, roundTripped.isPrivate)
|
||||
assertEquals(listOf(boldTextSource("bold")), roundTripped.textSources)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user