AbsoluteFileTest.kt 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /*
  2. * Copyright 2019-2022 Mamoe Technologies and contributors.
  3. *
  4. * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
  5. * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
  6. *
  7. * https://github.com/mamoe/mirai/blob/dev/LICENSE
  8. */
  9. package net.mamoe.mirai.mock.test
  10. import com.google.common.jimfs.Configuration
  11. import com.google.common.jimfs.Jimfs
  12. import kotlinx.coroutines.flow.first
  13. import kotlinx.coroutines.flow.firstOrNull
  14. import kotlinx.coroutines.flow.toList
  15. import net.mamoe.mirai.contact.MemberPermission
  16. import net.mamoe.mirai.event.events.GroupMessageEvent
  17. import net.mamoe.mirai.message.data.FileMessage
  18. import net.mamoe.mirai.mock.internal.remotefile.absolutefile.MockRemoteFiles
  19. import net.mamoe.mirai.mock.internal.serverfs.MockServerFileSystemImpl
  20. import net.mamoe.mirai.mock.utils.simpleMemberInfo
  21. import net.mamoe.mirai.utils.ExternalResource.Companion.toExternalResource
  22. import net.mamoe.mirai.utils.cast
  23. import org.junit.jupiter.api.AfterEach
  24. import org.junit.jupiter.api.Test
  25. import java.nio.file.FileSystem
  26. import kotlin.test.assertEquals
  27. import kotlin.test.assertNotEquals
  28. internal class AbsoluteFileTest : MockBotTestBase() {
  29. private val tmpfs: FileSystem = Jimfs.newFileSystem(Configuration.unix())
  30. private val disk = bot.tmpResourceServer.mockServerFileDisk
  31. private val group = bot.addGroup(11L, "a").also { println(it.owner) }
  32. private val fsys = MockServerFileSystemImpl(disk.cast())
  33. private val files = MockRemoteFiles(group, fsys)
  34. @AfterEach
  35. internal fun release() {
  36. tmpfs.close()
  37. }
  38. @Test
  39. internal fun listFileAndFolder() = runTest {
  40. val folder = files.root.createFolder("test1")
  41. files.root.createFolder("test2")
  42. val file = folder.uploadNewFile("test.txt", "cc".toByteArray().toExternalResource().toAutoCloseable())
  43. folder.uploadNewFile("test.txt", "cac".toByteArray().toExternalResource().toAutoCloseable())
  44. println(files.root.folders().toList())
  45. println(files.root.resolveFolder("test1")!!.files().toList())
  46. assertEquals(2, files.root.folders().toList().size)
  47. assertEquals(2, files.root.resolveFolder("test1")!!.files().toList().size)
  48. assertEquals("test.txt", files.root.resolveFolder("test1")!!.files().toList()[0].name)
  49. assertEquals("test1", files.root.resolveFolderById(folder.id)!!.name)
  50. assertEquals("test.txt", files.root.resolveFileById(file.id, true)!!.name)
  51. }
  52. @Test
  53. internal fun testDeleteAndMoveTo() = runTest {
  54. val f = files.root.createFolder("test")
  55. val ff = f.uploadNewFile("test.txt", "ccc".toByteArray().toExternalResource())
  56. val fff = files.root.resolveFileById(ff.id, true)!!
  57. assertEquals(fff, ff)
  58. f.renameTo("test2")
  59. assertEquals("test2", files.root.folders().first().name)
  60. fff.refresh()
  61. assertEquals(f.absolutePath + "/" + fff.name, fff.absolutePath)
  62. fff.moveTo(files.root)
  63. assertEquals("/${fff.name}", fff.absolutePath)
  64. assertEquals(files.root, fff.parent)
  65. fff.delete()
  66. assertEquals(false, fff.exists())
  67. assertEquals(null, files.root.resolveFileById(fff.id))
  68. }
  69. @Test
  70. internal fun testSendAndDownload() = runTest {
  71. val f = files.root.uploadNewFile("test.txt", "c".toByteArray().toExternalResource())
  72. println(files.fileSystem.findByPath("/test.txt").first().path)
  73. runAndReceiveEventBroadcast {
  74. group.addMember(simpleMemberInfo(222, "bb", permission = MemberPermission.MEMBER))
  75. .saysMessage { f.toMessage() }
  76. }.let { events ->
  77. assertEquals(1, events.size)
  78. assertEquals(true, events[0].cast<GroupMessageEvent>().message.contains(FileMessage))
  79. }
  80. assertEquals("c", f.getUrl()!!.toUrl().readText())
  81. }
  82. @Test
  83. fun testRename() = runTest {
  84. val folder = files.root.createFolder("test1")
  85. val file = folder.uploadNewFile("test.txt", "content".toByteArray().toExternalResource().toAutoCloseable())
  86. assertEquals(file.id, folder.resolveFiles("test.txt").first().id)
  87. folder.renameTo("test2")
  88. file.refresh()
  89. assertEquals(true, file.exists())
  90. assertNotEquals(null, folder.resolveFiles("test.txt").firstOrNull())
  91. }
  92. }