AuftragsCacheTest.ktАннотации: Test, Autowired
Классы: AuftragsCacheTest
Супертип(ы): AbstractTestBase
Функции (1): assertValues
Свойства (6): auftragDao, auftragsCache, rechnungDao, order, order, invoice
Импорты: 6 пакетов
Пакет: org.projectforge.business.fibu
package org.projectforge.business.fibu
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import org.projectforge.commons.test.TestUtils.Companion.assertSame
import org.projectforge.business.test.AbstractTestBase
import org.springframework.beans.factory.annotation.Autowired
import java.time.LocalDate
class AuftragsCacheTest : AbstractTestBase() {
@Autowired
private lateinit var auftragDao: AuftragDao
@Autowired
private lateinit var auftragsCache: AuftragsCache
@Autowired
private lateinit var rechnungDao: RechnungDao
@Test
fun `тест workflow заказа со счетами`() {
val order = AuftragDO().also {
it.addPosition(AuftragsPositionDO().also { pos ->
pos.titel = "Поз 1"
pos.nettoSumme = 100.toBigDecimal()
pos.status = AuftragsStatus.GELEGT
})
it.addPosition(AuftragsPositionDO().also { pos ->
pos.titel = "Поз 2"
pos.nettoSumme = 200.toBigDecimal()
pos.status = AuftragsStatus.GELEGT
})
it.addPosition(AuftragsPositionDO().also { pos ->
pos.titel = "Поз 3"
pos.nettoSumme = 400.toBigDecimal()
pos.status = AuftragsStatus.GELEGT
})
it.status = AuftragsStatus.GELEGT
it.nummer = auftragDao.nextNumber
}
auftragDao.insert(order, checkAccess = false)
auftragsCache.getOrderInfo(order.id).also { orderInfo ->
assertValues(orderInfo, akquiseSum = 700, netSum = 700)
}
order.status = AuftragsStatus.BEAUFTRAGT
order.positionen!!.find { it.titel == "Поз 1" }!!.status = AuftragsStatus.BEAUFTRAGT
order.positionen!!.find { it.titel == "Поз 2" }!!.status = AuftragsStatus.ABGELEHNT
order.positionen!!.find { it.titel == "Поз 3" }!!.status = AuftragsStatus.OPTIONAL
auftragDao.update(order, checkAccess = false)
auftragsCache.getOrderInfo(order.id).let { orderInfo ->
assertValues(orderInfo, akquiseSum = 400, netSum = 500, orderedNetSum = 100, notYetInvoicedSum = 100)
}
order.positionen!!.find { it.titel == "Поз 1" }!!.status = AuftragsStatus.ABGESCHLOSSEN
auftragDao.update(order, checkAccess = false)
auftragsCache.getOrderInfo(order.id).also { orderInfo ->
assertValues(
orderInfo, akquiseSum = 400, netSum = 500, orderedNetSum = 100,
toBeInvoicedSum = 100, notYetInvoicedSum = 100, toBeInvoiced = true
)
}
order.addPaymentSchedule(PaymentScheduleDO().also { schedule ->
schedule.amount = 50.toBigDecimal()
schedule.reached = true
})
auftragDao.update(order, checkAccess = false)
auftragsCache.getOrderInfo(order.id).also { orderInfo ->
// 100 за позицию к выставлению счёта и 50 за достигнутый график платежей, не привязанный к позиции.
assertValues(
orderInfo, akquiseSum = 400, netSum = 500, orderedNetSum = 100,
toBeInvoicedSum = 150, notYetInvoicedSum = 100, toBeInvoiced = true
)
}
order.addPaymentSchedule(PaymentScheduleDO().also { schedule ->
schedule.amount = 25.toBigDecimal()
schedule.reached = true
schedule.vollstaendigFakturiert = true
})
order.addPaymentSchedule(PaymentScheduleDO().also { schedule ->
schedule.amount = 80.toBigDecimal()
schedule.reached = true
schedule.positionNumber = order.positionen!!.find { it.titel == "Поз 1" }!!.number
})
auftragDao.update(order, checkAccess = false)
auftragsCache.getOrderInfo(order.id).also { orderInfo ->
// (25) игнорируется (уже полностью выставлен счёт).
// 80 за позицию к выставлению счёта "перезаписывается" 80 из графика платежей.
// 50 за достигнутый график платежей, не привязанный к позиции.
assertValues(
orderInfo, akquiseSum = 400, netSum = 500, orderedNetSum = 100,
toBeInvoicedSum = 130, notYetInvoicedSum = 100, toBeInvoiced = true
)
}
}
@Test
fun `тест заказа в стадии привлечения со счетами`() {
val order = AuftragDO().also {
it.addPosition(AuftragsPositionDO().also { pos ->
pos.titel = "Поз 1"
pos.nettoSumme = 100.toBigDecimal()
pos.status = AuftragsStatus.GELEGT
})
it.addPosition(AuftragsPositionDO().also { pos ->
pos.titel = "Поз 2"
pos.nettoSumme = 200.toBigDecimal()
pos.status = AuftragsStatus.GELEGT
})
it.status = AuftragsStatus.GELEGT
it.nummer = auftragDao.nextNumber
}
auftragDao.insert(order, checkAccess = false)
auftragsCache.getOrderInfo(order.id).let { orderInfo ->
assertValues(orderInfo, akquiseSum = 300, netSum = 300)
}
val invoice = RechnungDO().also {
it.addPosition(RechnungsPositionDO().also { pos -> // 50 из 100
pos.auftragsPosition = order.positionen!!.get(0)
pos.menge = 5.toBigDecimal()
pos.einzelNetto = 10.toBigDecimal()
// ... (сокращено, всего 157 строк)
868d6abb7 2025 -> 2026 63081666f Заголовки исходных файлов: 2024-> 2025. 42dc9fa16 Заказы: ordered -> commisioned. 176cb32d7 WIP: Gradle ae2c04ee0 Миграция в процессе... (все тесты всех пакетов: OK).