#summary Progress tracker for Melange project: Testing, Code Guru and Quality Assurance, GSoC 2011
#labels Phase-QA,Importance-Details,Contents-Update

<wiki:toc max_depth="3" />

= Introduction =
  This page will serve as a log and a resource for all the development activity being done in this project on testing. I have to write tests for the logic and views of Melange. The framework has undergone a major revision and the old tests are to be re-written.


= Meetings and Agendas =

== Monday May 16, 2011 (Community Bonding Period) 10:10 UTC ==

===Notes===
  Location : Gmail Chat

  Chaired by : Leo (Chong Liu)

  Notes taken by: Praveen

  * Told Leo that :
    * I have not been unable to concentrate on the project due to exams.
    * I have started reading the books which I had ordered, _'Django 1.1 Testing and Debugging, Karen M. Tracey'_ and _'Python Testing, Daniel Arbuckle'_
  * We discussed how to get started with the project.
  * Leo suggested:
    * start with soc.logic which are relatively easier and do not require much knowledge of Django and GAE
    * reuse the old tests which will require some modifications according to the new framework
    * after soc.logic attack modules.gsoc.logic and modules.gci.logic
    * write a python/shell script to calculate the frequency of a particular class and function which will give an idea about its importance and need for its thorough testing
  * We also discussed what functional testing is which I had not able to explain to Leo

== Wednesday May 24, 2011 ==

===Notes===
   Location: Gmail Chat
       
   Chaired by: Leo     

   Notes by: Praveen

  * Told Leo that I am going slow at the project and had not implemented the view yet that we were supposed to do.
  * We discussed what should the basic approach be while writing a test.
  * Leo asked me to refer to some open-source web test runners and see how do they do it and implement a view for my Melange instance. He suggested gaeunit.
  * Leo also told me about 'Mocks'.

  ===Coding Plan for this week===
  * Implement the view
  * Write test for at least one module in app.soc.logic

== Friday May 27, 2011 ==

===Notes===
    Location: Gmail Chat
     
    Chaired by: Leo  
   
    Notes by: Praveen

   * Asked Leo what apiproxy is. I encountered apiproxy in the source of gaeunit. He explained apiproxy is like a mapping from a function to a function to which it stubs out or replaces.
   * Told Leo that I do not want to use gaeunit and rather write my own code for melange. Leo suggested to study gaeunit and see how they do the magic.
   * Asked Leo a couple of questions regarding TaskQueues and the meeting concluded with Leo asking me to explore and explore and learn. 

==Monday May 30, 2011 ==

===Notes===
    Location: Gmail Chat 
    
    Chaired by: Leo  
   
    Notes by: Praveen

   * Reported my initial research regarding gaeunit to Leo
   * We discussed about how to handle the requests by the browser as there is a time restriction on a process in GAE.
   * gaeunit does not use TaskQueues and so Leo suggested that the other way to handle the requests would be by using a JavaScript. But I did not find any JavaScript in the code of gaeunit.
   * Since my main project is on testing, Leo put before me two options to choose from i.e to finish the online runner in a week or treat it as a side project and start testing. I chose to finish the online runner as I had already spent lot of time studying about it.
   * The conference call was suspended for the week.

==Monday June 6, 2011 ==

===Notes===
    Location: Gmail Chat
     
    Chaired by: Leo
     
    Notes by: Praveen

   * Told Leo that I have written the code for the online test runner and that it needs debugging.
   * Leo looked at the errors and told me that Nose uses some modules which are restricted by GAE. So we may have to try other options to make the runner.
   * The decision was made to write our own runner with the help of methods in unittest module in python.

   During: Melange Conference Call   Chaired by: Sverre   Notes by: Praveen

   * Told Sverre that I have been working on the online test runner in the week.
   * Sverre asked me to take it as a side project and start working on the Testing project now as the time is passing by.
   * Leo gave me two days to work on the test runner and finish the work which I started. If I am not successful, start testing.


== Wednesday June 8, 2011 ==

===Notes===
    Location: Gmail Chat
     
    Chaired by: Leo
     
    Notes by: Praveen

   * Informed Leo that I have finished writing the code for the online test runner and that the runner works on the local instance only.
   * It does not work on the live instance because our tests make use of gaetestbed library which imports mail_stub from appengine library and mail_stub can not work on a live instance as it starts a subprocess which is not allowed.
   * Leo asked me to start testing.


== Friday June 10, 2011 ==

===Notes===
    Location: Gmail Chat
     
    Chaired by: Leo
     
    Notes by: Praveen

   * Told Leo that I started working on testing today.
   * I asked him if every module in app.soc.logic needs to be tested. He told that all the non-trivial modules which are used presently needs to be tested.
   * I told him that I will start with the easier modules like soc.logic.tags, soc.logic.system etc.


 
 
= Coding Plan =

== May 16 - May 22 (Community Bonding Period) == 
  * Upload a GAE instance and write a view to run all the tests and return all results back
  * Write a python script to calculate the frequency of a term in the codebase
  * Read Django and GAE documentation.

== May 23 - June 15 (Official Coding Period) ==
  * Generate the directory structure of soc.logic
  * Write tests for app.soc.logic and then for modules.gsoc.logic and modules.gci.logic

= Links =
* My GSoC Proposal [https://github.com/praveen97uma/GSoC-Docs/wiki/Testing,-Code-Guru-and-Quality-Assurance/]

* My melange instance [http://melangetesting.appspot.com]

* A Web Test Runner [http://code.google.com/p/gaeunit/]

= External Testing Resources =
* _All I really need to know about [testable, maintainable, packagable] “scripts”_ [http://www.testingtv.com/2010/01/27/all-i-really-need-to-know-about-testable-maintainable-packagable-scripts/]

* Building Tests for Large, Untested Codebases [http://www.testingtv.com/2009/12/31/building-tests-for-large-untested-codebases/]

* Paver - Easy Build and Deployment Automation Tool for Python Projects [http://www.testingtv.com/2010/02/03/paver-easy-build-and-deployment-automation-for-python-projects/]

* Coverage Testing - The Good and the Bad [http://www.testingtv.com/2009/12/29/coverage-testing-the-good-and-the-bad/]