---
# System prepended metadata

title: LN fee paymentのテストシナリオ
tags: [テスト設計]

---

# 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の支払いがあっても何もしない", () => {});
});
```