/ tests / Project.py
Project.py
  1  # ########################## Copyrights and license ############################
  2  #                                                                              #
  3  # Copyright 2018 bbi-yggy <yossarian@blackbirdinteractive.com>                 #
  4  #                                                                              #
  5  # This file is part of PyGithub.                                               #
  6  # http://pygithub.github.io/PyGithub/v1/index.html                             #
  7  #                                                                              #
  8  # PyGithub is free software: you can redistribute it and/or modify it under    #
  9  # the terms of the GNU Lesser General Public License as published by the Free  #
 10  # Software Foundation, either version 3 of the License, or (at your option)    #
 11  # any later version.                                                           #
 12  #                                                                              #
 13  # PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY  #
 14  # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS    #
 15  # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #
 16  # details.                                                                     #
 17  #                                                                              #
 18  # You should have received a copy of the GNU Lesser General Public License     #
 19  # along with PyGithub. If not, see <http://www.gnu.org/licenses/>.             #
 20  #                                                                              #
 21  # ##############################################################################
 22  
 23  import github
 24  
 25  from . import Framework
 26  
 27  
 28  class Project(Framework.TestCase):
 29      def setUp(self):
 30          super().setUp()
 31          self.repo = self.g.get_user().get_repo("PyGithub")
 32  
 33      def testGetProject(self):
 34          pid = 1682941
 35          proj = self.g.get_project(pid)
 36          self.assertEqual(proj.id, pid)
 37          self.assertEqual(proj.name, "TestProject")
 38          self.assertEqual(repr(proj), 'Project(name="TestProject")')
 39  
 40      def testGetOrganizationProjects(self):
 41          expectedProjects = ["Project1", "Project2", "Project3"]
 42          org = self.g.get_organization("PyGithubTestOrg")
 43          projects = []
 44          for proj in org.get_projects("open"):
 45              projects.append(proj.name)
 46          self.assertEqual(projects, expectedProjects)
 47  
 48      def testGetRepositoryProjects(self):
 49          expectedProjects = ["TestProject", "TestProjectClosed"]
 50          projects = []
 51          for proj in self.repo.get_projects("all"):
 52              projects.append(proj.name)
 53          self.assertEqual(projects, expectedProjects)
 54  
 55      # See https://developer.github.com/v3/projects/#get-a-project
 56      def testProjectAttributes(self):
 57          pid = 1682941
 58          proj = self.g.get_project(pid)
 59          self.assertEqual(proj.owner_url, "https://api.github.com/repos/bbi-yggy/PyGithub")
 60          self.assertEqual(proj.url, "https://api.github.com/projects/1682941")
 61          self.assertEqual(proj.html_url, "https://github.com/bbi-yggy/PyGithub/projects/1")
 62          self.assertEqual(proj.columns_url, "https://api.github.com/projects/1682941/columns")
 63          self.assertEqual(proj.id, pid)
 64          self.assertEqual(proj.node_id, "MDc6UHJvamVjdDE2ODI5NDE=")
 65          self.assertEqual(proj.name, "TestProject")
 66          self.assertEqual(proj.body, "To be used for testing project access API for PyGithub.")
 67          self.assertEqual(proj.number, 1)
 68          self.assertEqual(proj.state, "open")
 69          self.assertEqual(proj.creator, self.repo.owner)
 70          self.assertEqual(proj.created_at.year, 2018)
 71          self.assertTrue(proj.updated_at > proj.created_at)
 72  
 73      # See https://developer.github.com/v3/projects/columns/#get-a-project-column
 74      def testProjectColumnAttributes(self):
 75          proj = self.g.get_project(1682941)
 76          col = proj.get_columns()[0]
 77          self.assertEqual(col.id, 3138830)
 78          self.assertEqual(col.node_id, "MDEzOlByb2plY3RDb2x1bW4zMTM4ODMw")
 79          self.assertEqual(col.name, "To Do")
 80          self.assertEqual(col.url, "https://api.github.com/projects/columns/3138830")
 81          self.assertEqual(col.project_url, "https://api.github.com/projects/1682941")
 82          self.assertEqual(col.cards_url, "https://api.github.com/projects/columns/3138830/cards")
 83          self.assertEqual(col.created_at.year, 2018)
 84          self.assertTrue(col.updated_at >= col.created_at)
 85          self.assertEqual(repr(col), 'ProjectColumn(name="To Do")')
 86  
 87      # See https://developer.github.com/v3/projects/cards/#get-a-project-card
 88      def testProjectCardAttributes(self):
 89          proj = self.g.get_project(1682941)
 90          col = proj.get_columns()[1]
 91          card = col.get_cards()[0]
 92          self.assertEqual(card.url, "https://api.github.com/projects/columns/cards/11780055")
 93          self.assertEqual(card.column_url, "https://api.github.com/projects/columns/3138831")
 94          self.assertEqual(card.content_url, "https://api.github.com/repos/bbi-yggy/PyGithub/issues/1")
 95          self.assertEqual(card.id, 11780055)
 96          self.assertEqual(card.node_id, "MDExOlByb2plY3RDYXJkMTE3ODAwNTU=")
 97          self.assertEqual(card.note, None)  # No notes for cards with content.
 98          self.assertEqual(card.creator, self.repo.owner)
 99          self.assertEqual(card.created_at.year, 2018)
100          self.assertTrue(card.updated_at >= card.created_at)
101          self.assertFalse(card.archived)
102          self.assertEqual(repr(card), "ProjectCard(id=11780055)")
103  
104      def testGetProjectCardContent(self):
105          proj = self.g.get_project(1682941)
106          col = proj.get_columns()[1]
107          cards = col.get_cards()
108  
109          pull_card = cards[0]
110          pull = pull_card.get_content("PullRequest")
111          self.assertIsInstance(pull, github.PullRequest.PullRequest)
112          self.assertEqual(pull.title, "Work in progress on support for GitHub projects API.")
113          self.assertRaises(ValueError, pull_card.get_content, "foo")
114  
115          issue_card = cards[1]
116          issue = issue_card.get_content()
117          self.assertIsInstance(issue, github.Issue.Issue)
118          self.assertEqual(issue.title, "Test issue")
119  
120          note_card = cards[2]
121          note_content = note_card.get_content()
122          self.assertEqual(note_content, None)
123  
124      def testProjectCardMove(self):
125          proj = self.g.get_project(1682941)
126          cols = proj.get_columns()
127          card = cols[1].get_cards()[0]
128          self.assertTrue(card.move("top", cols[2].id))
129          self.assertTrue(card.move("bottom", cols[1]))
130  
131      def testProjectCardDelete(self):
132          proj = self.g.get_project(1682941)
133          cols = proj.get_columns()
134          card = cols[1].get_cards()[0]
135          self.assertTrue(card.delete())
136  
137      def testGetAllProjectCards(self):
138          expectedProjects = ["TestProject"]
139          expectedCards = 5
140          projects = []
141          cards = 0
142          for proj in self.repo.get_projects():
143              projects.append(proj.name)
144              for col in proj.get_columns():
145                  for card in col.get_cards("all"):
146                      cards += 1
147          self.assertEqual(projects, expectedProjects)
148          self.assertEqual(cards, expectedCards)
149  
150      def testCreateColumn(self):
151          project = self.repo.create_project("Project created by PyGithub", "Project Body")
152          column = project.create_column(
153              "Project Column created by PyGithub",
154          )
155          self.assertEqual(column.id, 3999333)
156  
157      def testCreateCardWithNote(self):
158          project = self.repo.create_project("Project created by PyGithub", "Project Body")
159          column = project.create_column(
160              "Project Column created by PyGithub",
161          )
162          card1 = column.create_card(note="Project Card")
163          self.assertEqual(card1.id, 16039019)
164  
165      def testCreateCardFromIssue(self):
166          project = self.repo.create_project("Project created by PyGithub", "Project Body")
167          column = project.create_column(
168              "Project Column created by PyGithub",
169          )
170          issue = self.repo.create_issue(title="Issue created by PyGithub")
171          card2 = column.create_card(content_id=issue.id, content_type="Issue")
172          self.assertEqual(card2.id, 16039106)
173  
174      def testEditCardWithoutParameters(self):
175          proj = self.g.get_project(4015343)
176          col = proj.get_columns()[0]
177          card = col.create_card(note="Project Card")
178          card.edit()
179  
180      def testEditCardNote(self):
181          proj = self.g.get_project(4015343)
182          col = proj.get_columns()[0]
183          card = col.create_card(note="Project Card")
184          card.edit(note="Edited Card")
185          self.assertEqual(card.note, "Edited Card")
186  
187      def testEditCardArchived(self):
188          proj = self.g.get_project(4015343)
189          col = proj.get_columns()[0]
190          card = col.create_card(note="Project Card")
191          card.edit(archived=True)
192          self.assertEqual(card.archived, True)