github.com/unirita/cuto@v0.9.8-0.20160830082821-aa6652f877b7/flowgen/converter/export_test.go (about)

     1  package converter
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  )
     7  
     8  func getOpenGatewayId(g *Gateway) string {
     9  	return g.ID() + "_open"
    10  }
    11  
    12  func getCloseGatewayId(g *Gateway) string {
    13  	return g.ID() + "_close"
    14  }
    15  
    16  func isExistSequenceFlow(d *Definitions, from string, to string) bool {
    17  	for _, flow := range d.Process.Flows {
    18  		if flow.From == from && flow.To == to {
    19  			return true
    20  		}
    21  	}
    22  
    23  	return false
    24  }
    25  
    26  func assertSequenceFlow(t *testing.T, d *Definitions, from string, to string) {
    27  	if !isExistSequenceFlow(d, from, to) {
    28  		t.Errorf("Expected SequenceFlow[FROM:%s,TO:%s] not exists.", from, to)
    29  	}
    30  }
    31  
    32  func TestGenerateDefinitions(t *testing.T) {
    33  	initIndexes()
    34  
    35  	// job1->job2->[job3,job4->job5]->[job6,job7]->job8
    36  	job1 := NewJob("test1")
    37  	job2 := NewJob("test2")
    38  	job3 := NewJob("test3")
    39  	job4 := NewJob("test4")
    40  	job5 := NewJob("test5")
    41  	job6 := NewJob("test6")
    42  	job7 := NewJob("test7")
    43  	job8 := NewJob("test8")
    44  	gw1 := NewGateway()
    45  	gw2 := NewGateway()
    46  	job1.SetNext(job2)
    47  	job2.SetNext(gw1)
    48  	gw1.AddPathHead(job3)
    49  	gw1.AddPathHead(job4)
    50  	job4.SetNext(job5)
    51  	gw1.SetNext(gw2)
    52  	gw2.AddPathHead(job6)
    53  	gw2.AddPathHead(job7)
    54  	gw2.SetNext(job8)
    55  
    56  	d := GenerateDefinitions(job1)
    57  	assertSequenceFlow(t, d, job1.ID(), job2.ID())
    58  	assertSequenceFlow(t, d, job2.ID(), getOpenGatewayId(gw1))
    59  	assertSequenceFlow(t, d, getOpenGatewayId(gw1), job3.ID())
    60  	assertSequenceFlow(t, d, getOpenGatewayId(gw1), job4.ID())
    61  	assertSequenceFlow(t, d, job4.ID(), job5.ID())
    62  	assertSequenceFlow(t, d, job3.ID(), getCloseGatewayId(gw1))
    63  	assertSequenceFlow(t, d, job5.ID(), getCloseGatewayId(gw1))
    64  	assertSequenceFlow(t, d, getCloseGatewayId(gw1), getOpenGatewayId(gw2))
    65  	assertSequenceFlow(t, d, getOpenGatewayId(gw2), job6.ID())
    66  	assertSequenceFlow(t, d, getOpenGatewayId(gw2), job7.ID())
    67  	assertSequenceFlow(t, d, job6.ID(), getCloseGatewayId(gw2))
    68  	assertSequenceFlow(t, d, job7.ID(), getCloseGatewayId(gw2))
    69  	assertSequenceFlow(t, d, getCloseGatewayId(gw2), job8.ID())
    70  }
    71  
    72  func TestExport(t *testing.T) {
    73  	expected := `<?xml version="1.0" encoding="UTF-8"?>
    74  <definitions>
    75      <process>
    76          <startEvent id=":start"></startEvent>
    77          <endEvent id=":end"></endEvent>
    78          <serviceTask id="job1" name="test1"></serviceTask>
    79          <serviceTask id="job2" name="test2"></serviceTask>
    80          <serviceTask id="job3" name="test3"></serviceTask>
    81          <serviceTask id="job4" name="test4"></serviceTask>
    82          <parallelGateway id="gw1_open"></parallelGateway>
    83          <parallelGateway id="gw1_close"></parallelGateway>
    84          <sequenceFlow sourceRef=":start" targetRef="job1"></sequenceFlow>
    85          <sequenceFlow sourceRef="job1" targetRef="gw1_open"></sequenceFlow>
    86          <sequenceFlow sourceRef="gw1_open" targetRef="job2"></sequenceFlow>
    87          <sequenceFlow sourceRef="job2" targetRef="gw1_close"></sequenceFlow>
    88          <sequenceFlow sourceRef="gw1_open" targetRef="job3"></sequenceFlow>
    89          <sequenceFlow sourceRef="job3" targetRef="gw1_close"></sequenceFlow>
    90          <sequenceFlow sourceRef="gw1_close" targetRef="job4"></sequenceFlow>
    91          <sequenceFlow sourceRef="job4" targetRef=":end"></sequenceFlow>
    92      </process>
    93  </definitions>`
    94  
    95  	initIndexes()
    96  	job1 := NewJob("test1")
    97  	job2 := NewJob("test2")
    98  	job3 := NewJob("test3")
    99  	job4 := NewJob("test4")
   100  	gw1 := NewGateway()
   101  	job1.SetNext(gw1)
   102  	gw1.AddPathHead(job2)
   103  	gw1.AddPathHead(job3)
   104  	gw1.SetNext(job4)
   105  	d := GenerateDefinitions(job1)
   106  
   107  	buf := new(bytes.Buffer)
   108  	err := Export(buf, d)
   109  	if err != nil {
   110  		t.Fatalf("Unexpected error occured: %s", err)
   111  	}
   112  
   113  	if buf.String() != expected {
   114  		t.Errorf("Exported BPMN is not expected.")
   115  		t.Logf("Output:\n%s", expected)
   116  	}
   117  }