# LN fee paymentのテストシナリオ
###### tags: `テスト設計`
## Proof of Payment
```javascript=
describe("Proof of Payment", () => {
// 発行ノードの公開鍵、Invoice、Preimageを受け取ることで、確かにこのユーザーはln払いを成功したと検証できる
it("should verify proof of payment with OK: pubkey, OK: Invoice, OK: Preimage", () => {});
// 不正な発行ノードの公開鍵だと、Proof of paymentの検証に失敗する
it("should not verify proof of payment with NG: pubkey, OK: Invoice, OK: Preimage", () => {});
// 不正なInvoiceだと、Proof of paymentの検証に失敗する
it("should not verify proof of payment with OK: pubkey, NG: Invoice, OK: Preimage", () => {});
// 不正なPreimageだと、Proof of paymentの検証に失敗する
it("should not verify proof of payment with OK: pubkey, OK: Invoice, NG: Preimage", () => {});
});
```
## ユーザーからのTxの受け取りとInvoice・OPSIGの作成
```javascript=
// LNノードがP2PでTXデータを受け取る (HTTP等、他の通信経路でもほぼ同様)
describe("Receive TX request", () => {
// TXリクエストを検証
it("Validate TX request", () => {});
// もしinvalidなtxであればエラーを返す
it("should fail if this is invalid TX request", () => {});
// TX feeを計算
it("Calculate TX fee", () => {});
// 算出したFeeをもとにInvoiceを作成する
describe("Create Invoice", () => {
// AmountはTxDataから算出されたfeeと同額である必要がある
it("Check amount", () => {});
// 有効期限はLeaderが交代するより十分前である必要がある
it("Check expiry", () => {});
// 正しくPreimageを保存する
it("Create and save preimage", () => {});
});
// InvoiceおよびOneTimeAddressをもとにOPSIGを作成
describe("Create OPSIG", () => {
// 署名するメッセージが正しく生成されているか
it("Create message", () => {});
// 事前に登録した公開鍵で複合できるか確かめる
it("OPSIG can be verified by Operator's pubkey", () => {})
});
// LNノードにP2Pで、あるいは別の通信経路でreceipt, invoice, OPSIGを返す
it("Send receipt, invoice, OPSIG")
});
```
```javascript=
// Paymentの受け取りの検知とTxの実行を行う
describe("Receive LN Payment", () => {
// LN払いのFeeを正しく受け取って実行する
it("Receive LN fee and execute", () => {});
it("txと紐づいてないinvoiceの支払いがあっても何もしない", () => {});
});
```